From 0da0a0eb5497ce7e554c546c554db046c02781bb Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 12 Mar 2018 16:45:49 +0100 Subject: [PATCH 001/251] PCHR-3221: Simplest setup (static cookie, only non-interactive scenarios) --- .../backstop_data/backstop.json | 161 ++++++++++++++++++ .../chromy/clickAndHoverHelper.js | 24 +++ .../engine_scripts/chromy/loadCookies.js | 22 +++ .../engine_scripts/chromy/onBefore.js | 6 + .../engine_scripts/chromy/onReady.js | 5 + .../backstop_data/engine_scripts/cookies.json | 14 ++ .../backstop_data/engine_scripts/onBefore.js | 4 + .../backstop_data/engine_scripts/onReady.js | 6 + 8 files changed, 242 insertions(+) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/clickAndHoverHelper.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json new file mode 100644 index 00000000000..4be6e77a1b8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json @@ -0,0 +1,161 @@ +{ + "id": "CiviHR", + "viewports": [{ + "label": "desktop", + "width": 1920, + "height": 900 + }], + "onBeforeScript": "chromy/onBefore.js", + "onReadyScript": "chromy/onReady.js", + "scenarios": [ + { + "label": "Contact Summary", + "url": "http://localhost:8017/index.php?q=civicrm/contact/view&reset=1&cid=4", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Absence Periods list", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/periods?action=browse", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Absence Periods form", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/periods?action=add", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Absence Types list", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/types?action=browse", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Absence Types form", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/types?action=add", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "General Settings", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/general_settings", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Leave & Absences Import - Step 1", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/import", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Public Holidays list", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/public_holidays?action=browse", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Public Holidays form", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/public_holidays?action=add", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Work Patterns list", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/work_patterns?action=browse", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Work Pattern description form", + "url": "http://localhost:8017/civicrm/admin/leaveandabsences/work_patterns?action=add", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Features", + "url": "http://localhost:8017/features-in-civihr", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Customize Onboarding Wizard", + "url": "http://localhost:8017/customize-onboarding-wizard", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Password Page", + "url": "http://localhost:8017/user/1/edit", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "Personal Details Page", + "url": "http://localhost:8017/onboarding-form", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Dashboard", + "url": "http://localhost:8017/dashboard", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - HR Resources", + "url": "http://localhost:8017/hr-resources", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - HR Vacancies", + "url": "http://localhost:8017/hr-vacancies", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - My Details", + "url": "http://localhost:8017/hr-details", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Reports", + "url": "http://localhost:8017/reports", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Reports people", + "url": "http://localhost:8017/reports/people/", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Reports - Leave and Absence", + "url": "http://localhost:8017/reports/leave_and_absence/", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Reports - Age groups", + "url": "http://localhost:8017/reports/settings/age_group/", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Staff Directory", + "url": "http://localhost:8017/staff-directory", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "SSP - Tasks", + "url": "http://localhost:8017/tasks-and-documents", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "T&A / Calendar", + "url": "http://localhost:8017/civicrm/tasksassignments/dashboard#/calendar", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + }, + { + "label": "T&A / Documents", + "url": "http://localhost:8017/civicrm/tasksassignments/dashboard#/documents", + "cookiePath": "backstop_data/engine_scripts/cookies.json" + } + ], + "paths": { + "bitmaps_reference": "backstop_data/bitmaps_reference", + "bitmaps_test": "backstop_data/bitmaps_test", + "engine_scripts": "backstop_data/engine_scripts", + "html_report": "backstop_data/html_report", + "ci_report": "backstop_data/ci_report" + }, + "report": ["browser"], + "engine": "chrome", + "engineFlags": [], + "asyncCaptureLimit": 5, + "asyncCompareLimit": 50, + "debug": false, + "debugWindow": false +} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/clickAndHoverHelper.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/clickAndHoverHelper.js new file mode 100644 index 00000000000..fb874283b97 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/clickAndHoverHelper.js @@ -0,0 +1,24 @@ +module.exports = function (chromy, scenario) { + var hoverSelector = scenario.hoverSelector; + var clickSelector = scenario.clickSelector; + var postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int] + + if (hoverSelector) { + chromy + .wait(hoverSelector) + .rect(hoverSelector) + .result(function (rect) { + chromy.mouseMoved(rect.left, rect.top); + }); + } + + if (clickSelector) { + chromy + .wait(clickSelector) + .click(clickSelector); + } + + if (postInteractionWait) { + chromy.wait(postInteractionWait); + } +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js new file mode 100644 index 00000000000..6bd1c77de3f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js @@ -0,0 +1,22 @@ +var fs = require('fs'); + +module.exports = function (chromy, scenario) { + var cookies = []; + var cookiePath = scenario.cookiePath; + + // READ COOKIES FROM FILE IF EXISTS + if (fs.existsSync(cookiePath)) { + cookies = JSON.parse(fs.readFileSync(cookiePath)); + } + + // MUNGE COOKIE DOMAIN FOR CHROMY USAGE + cookies = cookies.map(cookie => { + cookie.url = 'http://' + cookie.domain; + delete cookie.domain; + return cookie; + }); + + // SET COOKIES VIA CHROMY + chromy.setCookie(cookies); + console.log('Cookie state restored with:', JSON.stringify(cookies, null, 2)); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js new file mode 100644 index 00000000000..e174ef8b424 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js @@ -0,0 +1,6 @@ +module.exports = function (chromy, scenario, vp) { + require('./loadCookies')(chromy, scenario); + + // IGNORE ANY CERT WARNINGS + chromy.ignoreCertificateErrors(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js new file mode 100644 index 00000000000..6238af8041b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js @@ -0,0 +1,5 @@ +module.exports = function (chromy, scenario, vp) { + console.log('SCENARIO > ' + scenario.label); + require('./clickAndHoverHelper')(chromy, scenario); + // add more ready handlers here... +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json new file mode 100644 index 00000000000..d27f8ccdc51 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json @@ -0,0 +1,14 @@ +[ + { + "domain": "localhost", + "path": "/", + "name": "SESSb0d2aa2a780887ad78e3ed54c39c415d", + "value": "OW9Zf08Up3zz_0wM58j3feR7kE7f1QddrmTmHoFu47s", + "expirationDate": 1522873084, + "hostOnly": false, + "httpOnly": true, + "secure": false, + "session": true, + "sameSite": "no_restriction" + } +] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js new file mode 100644 index 00000000000..356894575e6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js @@ -0,0 +1,4 @@ +module.exports = function (engine, scenario, vp) { + // This script runs before your app loads. Edit here to log-in, load cookies or set other states required for your test. + console.log('onBefore.js has run for ' + vp.label + '.'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js new file mode 100644 index 00000000000..78b5856938e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js @@ -0,0 +1,6 @@ +module.exports = function (engine, scenario, vp) { + engine.evaluate(function () { + // Your web-app is now loaded. Edit here to simulate user interactions or other state changes in the browser window context. + }); + console.log('onReady.js has run for: ', vp.label); +}; From 3a077f7227de2bb671b6c9f7b30559104c271061 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 12 Mar 2018 18:49:18 +0100 Subject: [PATCH 002/251] PCHR-3221: Adapt main page object to chromy --- .../backstop_data/page-objects/page.js | 67 ++++++------------- 1 file changed, 21 insertions(+), 46 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index d571b8d1dfd..b93a3888f9e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -1,6 +1,5 @@ var _ = require('lodash'); var Promise = require('es6-promise').Promise; -var customCasperJS = require('../utils/custom-casperjs'); /** * Closes any modal currently open @@ -8,15 +7,12 @@ var customCasperJS = require('../utils/custom-casperjs'); * @return {object} */ function closeAnyModal () { - var casper = this.casper; var openModalSelector = '.modal.in'; - casper.then(function () { - if (casper.exists(openModalSelector)) { - casper.click(openModalSelector + ' .close[ng-click="cancel()"]'); - casper.wait(300); - } - }); + if (this.chromy.exists(openModalSelector)) { + this.chromy.click(openModalSelector + ' .close[ng-click="cancel()"]'); + this.chromy.wait(300); + } return this; } @@ -27,15 +23,12 @@ function closeAnyModal () { * @return {object} */ function closeNotifications () { - var casper = this.casper; var notificationSelector = 'a.ui-notify-cross.ui-notify-close'; - casper.then(function () { - if (casper.exists(notificationSelector)) { - casper.click(notificationSelector); - casper.wait(500); - } - }); + if (this.chromy.exists(notificationSelector)) { + this.chromy.click(notificationSelector); + this.chromy.wait(500); + } return this; } @@ -48,19 +41,15 @@ module.exports = { * Stores a customized version of CasperJS and then wait for a * until a certain "ready" condition is met, if the page is set up to do so * - * @param {object} casper + * @param {object} chromy * @param {boolean} clearDialogs if true it will close modals and notifications * @return {object} */ - init: function (casper, clearDialogs) { + init: function (chromy, clearDialogs) { clearDialogs = typeof clearDialogs !== 'undefined' ? !!clearDialogs : true; - this.casper = customCasperJS(casper); - this.casper.options.waitTimeout = 60000; - - !!this.waitForReady && this.casper.then(function () { - this.waitForReady(); - }.bind(this)); + this.chromy = chromy; + !!this.waitForReady && this.waitForReady(); if (clearDialogs) { closeAnyModal.call(this); @@ -90,31 +79,17 @@ module.exports = { * @return {Promise} */ waitForModal: function (modalModule, waitSelector) { - var casper = this.casper; + var chromy = this.chromy; return new Promise(function (resolve) { - casper.then(function () { - casper.waitUntilVisible(waitSelector || '.modal', function () { - casper.wait(300); - - if (modalModule) { - resolve(require('./modals/' + modalModule).init(casper, false)); - } else { - resolve(); - } - }); - }); + chromy.wait(waitSelector || '.modal'); + chromy.wait(300); + + if (modalModule) { + resolve(require('./modals/' + modalModule).init(chromy, false)); + } else { + resolve(); + } }); - }, - - /** - * Waits until element is visible on the browser. - * - * @return {Promise} - */ - waitUntilVisible: function (elementSelector) { - return this.casper.then(function () { - return this.casper.waitUntilVisible(elementSelector); - }.bind(this)); } }; From 06869953d92aae71b5d5e59e4c799edcd2cc9b04 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 12 Mar 2018 18:50:15 +0100 Subject: [PATCH 003/251] PCHR-3221: Partially Adapt contact summary page object to chromy --- .../page-objects/contact-summary.js | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index 893e2613120..4edc175bd36 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -10,19 +10,19 @@ module.exports = (function () { * @return {Promise} resolves with the modal page object */ openManageRightsModal: function () { - var casper = this.casper; + var chromy = this.chromy; return new Promise(function (resolve) { - casper.then(function () { - this.showActions(); - }.bind(this)); + this.showActions(); - casper.then(function () { - casper.click('[data-contact-access-rights]'); - casper.waitWhileVisible('.spinner'); + chromy.click('[data-contact-access-rights]'); + chromy.wait(function () { + var dom = document.querySelector('.spinner'); + + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); - resolve(this.waitForModal('contact-access-rights')); - }.bind(this)); + resolve(this.waitForModal('contact-access-rights')); }.bind(this)); }, @@ -51,12 +51,8 @@ module.exports = (function () { * Shows the dropdown of the "Actions" button in the contact summary page */ showActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('#crm-contact-actions-link'); - casper.waitUntilVisible('#crm-contact-actions-list'); - }); + this.chromy.click('#crm-contact-actions-link'); + this.chromy.wait('#crm-contact-actions-list'); } }); })(); From fb5236019ba9a85ec4c9fa791bedc800a435eabe Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 12 Mar 2018 18:51:00 +0100 Subject: [PATCH 004/251] PCHR-3221: Adapt contact access rights modal object to chromy --- .../page-objects/modals/contact-access-rights.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js index c274febe3d3..02e31eb5343 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js @@ -9,12 +9,10 @@ module.exports = (function () { * @return {object} */ openDropdown: function (name) { - casper.then(function () { - var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; + var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; - casper.click(common.replace('%{name}', name)); - casper.wait(100); - }); + this.chromy.click(common.replace('%{name}', name)); + this.chromy.wait(100); return this; } From 0135c60a505949da30ebd00561b877e8ab2b98d0 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 12 Mar 2018 18:51:40 +0100 Subject: [PATCH 005/251] PCHR-3221: Add chromy scripts for contact access rights --- .../chromy/contact-access-rights/open-ui-select.js | 10 ++++++++++ .../chromy/contact-access-rights/show.js | 7 +++++++ 2 files changed, 17 insertions(+) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js new file mode 100644 index 00000000000..75ff97f2f9d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openManageRightsModal() + .then(function (modal) { + modal.openDropdown('locations'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js new file mode 100644 index 00000000000..1303d5f3f84 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openManageRightsModal(); +}; From 36028407fcec64cf9723a9dfcbbef98bc92b43d4 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 13 Mar 2018 14:02:48 +0100 Subject: [PATCH 006/251] PCHR-3221: Add chromy scripts contact summary's show action --- .../engine_scripts/chromy/contact-summary/show-actions.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js new file mode 100644 index 00000000000..92947f379c1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (casper) { + page.init(casper).showActions(); +}; From 628c45b839a75a317b0e5be7689e17f6643b81ec Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 13 Mar 2018 14:05:23 +0100 Subject: [PATCH 007/251] PCHR-3221: Add chromy scripts for leave absences import --- .../leave-absence-dashboard/import/step-2.js | 7 ++++ .../leave-absence-dashboard/import/step-3.js | 7 ++++ .../leave-absence-dashboard/import/step-4.js | 7 ++++ .../page-objects/leave-absence-import.js | 36 ++++++------------- 4 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js new file mode 100644 index 00000000000..3f8292c676a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-import'); + +module.exports = function (chromy) { + page.init(chromy).showStep2(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js new file mode 100644 index 00000000000..7f57f16aed2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-import'); + +module.exports = function (chromy) { + page.init(chromy).showStep3(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js new file mode 100644 index 00000000000..17499fc9bfc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-import'); + +module.exports = function (chromy) { + page.init(chromy).showStep4(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js index 0351af9d2eb..38dc3b285b7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js @@ -1,12 +1,7 @@ +var path = require('path'); var page = require('./page'); module.exports = (function () { - var stepsUrls = { - 2: '_qf_MapField_display=true', - 3: '_qf_Preview_display=true', - 4: '_qf_Summary_display=true' - }; - return page.extend({ /** * Displays L&A Import Form Step 2 by uploading a sample import file and @@ -15,13 +10,11 @@ module.exports = (function () { * @return Page instance. */ showStep2: function () { - var filePath = 'backstop_data/uploads/leave-and-absences-import-data.csv'; + var filePath = path.join(__dirname, '..', 'uploads/leave-and-absences-import-data.csv'); - this.casper.page.uploadFile('input[name=uploadFile]', filePath); - this.casper.fillSelectors('#DataSource', { - '#skipColumnHeader': true - }, false); - this.submitAndWaitForStep(2); + this.chromy.setFile('input[name="uploadFile"]', filePath); + this.chromy.check('#skipColumnHeader'); + this.submitAndWait(); return this; }, @@ -34,7 +27,7 @@ module.exports = (function () { */ showStep3: function () { this.showStep2(); - this.submitAndWaitForStep(3); + this.submitAndWait(); return this; }, @@ -47,31 +40,24 @@ module.exports = (function () { */ showStep4: function () { this.showStep3(); - this.submitAndWaitForStep(4); + this.submitAndWait(); return this; }, /** * Clicks on next button (.validate) and waits for Step URL. - * - * @param {Number} step - the step to wait for. */ - submitAndWaitForStep: function (step) { - var casper = this.casper; - var urlRegExp = new RegExp(stepsUrls[step]); - - casper.thenClick('.crm-leave-and-balance-import .validate') - .then(function () { - return casper.waitForUrl(urlRegExp); - }); + submitAndWait: function () { + this.chromy.click('.crm-leave-and-balance-import .validate'); + this.chromy.waitLoadEvent(); }, /** * Waits until the import form is visible. */ waitForReady: function () { - this.waitUntilVisible('.crm-leave-and-balance-import'); + this.chromy.wait('.crm-leave-and-balance-import'); } }); })(); From e0329936c932fb7dc97d8e459aa1a926cd4db166 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 13 Mar 2018 14:11:53 +0100 Subject: [PATCH 008/251] PCHR-3221: Add chromy scripts for work patterns --- .../chromy/work-patterns/show-calendar-form.js | 7 +++++++ .../backstop_data/page-objects/work-patterns-form.js | 8 ++------ 2 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js new file mode 100644 index 00000000000..2d22a84c4a7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/work-patterns-form'); + +module.exports = function (chromy) { + page.init(chromy).showCalendarForm(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js index b4e9f2bac42..43816a61748 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js @@ -8,11 +8,7 @@ module.exports = (function () { * @return The Page instance. */ showCalendarForm: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('a[href="#work-pattern-calendar"]'); - }); + this.chromy.click('a[href="#work-pattern-calendar"]'); return this; }, @@ -21,7 +17,7 @@ module.exports = (function () { * Waits until the work pattern form is visible. */ waitForReady: function () { - this.waitUntilVisible('.work-pattern-form'); + this.chromy.visible('.work-pattern-form'); } }); })(); From 23e646c526a3e20a224fef7e4a5d52b4a1ad220c Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 13 Mar 2018 16:10:11 +0100 Subject: [PATCH 009/251] PCHR-3221: Add chromy scripts for leave calendar (admin) --- .../leave-calendar/leave-calendar.js | 7 +++++++ .../page-objects/leave-absence-dashboard.js | 16 +++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js new file mode 100644 index 00000000000..702e54480c3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-dashboard'); + +module.exports = function (chromy) { + page.init(chromy).openTab('leave-calendar'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js index a9897fc4cf6..9dfb0505953 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js @@ -11,17 +11,15 @@ module.exports = (function () { * @return {object} resolves with the tab page object */ openTab: function (tabId) { - var casper = this.casper; - var tab = require('./tabs/' + tabId).init(casper, false); + var chromy = this.chromy; + var tab = require('./tabs/' + tabId).init(chromy, false); return new Promise(function (resolve) { - casper.then(function () { - casper.click('[ui-sref="' + tab.tabUiSref + '"]'); - casper.waitFor(tab.ready.bind(tab), function () { - casper.wait(500); - resolve(tab); - }); - }); + chromy.click('[ui-sref="' + tab.tabUiSref + '"]'); + chromy.wait(tab.readySelector); + chromy.wait(500); + + resolve(tab); }); } }); From 1a9282912571d62688272dcc835b1c7809ddcdca Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 11:04:11 +0100 Subject: [PATCH 010/251] PCHR-3221: Remove code warning before taking screenshot --- .../engine_scripts/chromy/onReady.js | 5 ++- .../backstop_data/page-objects/page.js | 38 +++++++++++++------ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js index 6238af8041b..374c7163105 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js @@ -1,5 +1,8 @@ +var page = require('../../page-objects/contact-summary'); + module.exports = function (chromy, scenario, vp) { console.log('SCENARIO > ' + scenario.label); require('./clickAndHoverHelper')(chromy, scenario); - // add more ready handlers here... + + page.init(chromy); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index b93a3888f9e..3bae746ff24 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -4,7 +4,7 @@ var Promise = require('es6-promise').Promise; /** * Closes any modal currently open * - * @return {object} + * @return {Object} */ function closeAnyModal () { var openModalSelector = '.modal.in'; @@ -20,7 +20,7 @@ function closeAnyModal () { /** * Closes any notification currently open * - * @return {object} + * @return {Object} */ function closeNotifications () { var notificationSelector = 'a.ui-notify-cross.ui-notify-close'; @@ -36,14 +36,11 @@ function closeNotifications () { module.exports = { /** - * Initializes the page + * Initializes the page and removes any code warnings from the page * - * Stores a customized version of CasperJS and then wait for a - * until a certain "ready" condition is met, if the page is set up to do so - * - * @param {object} chromy - * @param {boolean} clearDialogs if true it will close modals and notifications - * @return {object} + * @param {Object} chromy + * @param {Boolean} clearDialogs if true it will close modals and notifications + * @return {Object} */ init: function (chromy, clearDialogs) { clearDialogs = typeof clearDialogs !== 'undefined' ? !!clearDialogs : true; @@ -51,6 +48,25 @@ module.exports = { this.chromy = chromy; !!this.waitForReady && this.waitForReady(); + chromy.evaluate(function () { + return document.location.href; + }) + .result(function (href) { + var isAdmin = href.indexOf('civicrm/') > 1; + + if (isAdmin) { + chromy.evaluate(function () { + var errorsWrapper = document.querySelector('#content > #console'); + errorsWrapper && (errorsWrapper.style.display = 'none'); + }); + } else { + chromy.evaluate(function () { + var errorsWrapper = document.querySelector('#messages .alert'); + errorsWrapper && (errorsWrapper.style.display = 'none'); + }); + } + }); + if (clearDialogs) { closeAnyModal.call(this); closeNotifications.call(this); @@ -62,9 +78,9 @@ module.exports = { /** * Used to extend the main page * - * @param {object} page + * @param {Object} page * a collection of methods and properties that will extend the main page - * @return {object} + * @return {Object} */ extend: function (page) { return _.assign(Object.create(this), page); From f9f1e4d5fd3e8c89bd2d181120540a6cebb92e39 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 13:24:13 +0100 Subject: [PATCH 011/251] PCHR-3221: Force backstopjs to use latest vesion of chromy via shrinkwrap --- ...{package-lock.json => npm-shrinkwrap.json} | 141 +++++++++++------- uk.co.compucorp.civicrm.hrcore/package.json | 1 + 2 files changed, 87 insertions(+), 55 deletions(-) rename uk.co.compucorp.civicrm.hrcore/{package-lock.json => npm-shrinkwrap.json} (99%) diff --git a/uk.co.compucorp.civicrm.hrcore/package-lock.json b/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json similarity index 99% rename from uk.co.compucorp.civicrm.hrcore/package-lock.json rename to uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json index b499d5c57d4..47064d00c36 100644 --- a/uk.co.compucorp.civicrm.hrcore/package-lock.json +++ b/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json @@ -6,19 +6,23 @@ "@types/core-js": { "version": "0.9.46", "resolved": "https://registry.npmjs.org/@types/core-js/-/core-js-0.9.46.tgz", - "integrity": "sha512-LooLR6XHes9V+kNYRz1Qm8w3atw9QMn7XeZUmIpUelllF9BdryeUKd/u0Wh5ErcjpWfG39NrToU9MF7ngsTFVw==", - "dev": true + "integrity": "sha512-LooLR6XHes9V+kNYRz1Qm8w3atw9QMn7XeZUmIpUelllF9BdryeUKd/u0Wh5ErcjpWfG39NrToU9MF7ngsTFVw==" }, "@types/mkdirp": { "version": "0.3.29", "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.3.29.tgz", - "integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=", - "dev": true + "integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=" }, "@types/node": { - "version": "6.0.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.66.tgz", - "integrity": "sha1-VoC3SmE10z1MAER+fD3GkaRgFiU=", + "version": "9.4.7", + "resolved": "http://registry.npmjs.org/@types/node/-/node-9.4.7.tgz", + "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==", + "dev": true + }, + "@types/rimraf": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-0.0.28.tgz", + "integrity": "sha1-VWJRm8eWPKyoq/fxKMrjtZTUHQY=", "dev": true }, "JSONStream": { @@ -648,7 +652,6 @@ "requires": { "casperjs": "1.1.4", "chalk": "1.1.3", - "chromy": "0.5.7", "fs-extra": "0.30.0", "jump.js": "1.0.2", "junitwriter": "0.3.1", @@ -674,13 +677,54 @@ "temp": "0.8.3", "webpack": "3.11.0", "webpack-dev-server": "2.11.2" + }, + "dependencies": { + "@types/node": { + "version": "6.0.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.66.tgz", + "integrity": "sha1-VoC3SmE10z1MAER+fD3GkaRgFiU=" + }, + "chrome-launcher": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.4.0.tgz", + "integrity": "sha512-Uq34nQ2peVRwyjsyoLs01mL9aEQDbc5RCZWNyYjGPt5ZFPL2B4OazSc98hO6HZOvMUILLL4MyAEVMzA5OvwWug==", + "requires": { + "@types/core-js": "0.9.46", + "@types/mkdirp": "0.3.29", + "@types/node": "6.0.66", + "lighthouse-logger": "1.0.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "chrome-remote-interface": { + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.23.3.tgz", + "integrity": "sha512-Bj3zMOEqJNVOll/5LrtvSdpbXSsCiSdnSQPmKUQDmAofahHczR3Qp5VJaAKrhNC/nlv9jj74aYzxTUPKrez8rA==", + "requires": { + "commander": "2.1.0", + "ws": "2.0.3" + } + }, + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + }, + "ws": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-2.0.3.tgz", + "integrity": "sha1-Uy/UmcP319cg5UPx+AcQbPxX2cs=", + "requires": { + "ultron": "1.1.1" + } + } } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -886,7 +930,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -1326,39 +1369,41 @@ } }, "chrome-launcher": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.4.0.tgz", - "integrity": "sha512-Uq34nQ2peVRwyjsyoLs01mL9aEQDbc5RCZWNyYjGPt5ZFPL2B4OazSc98hO6HZOvMUILLL4MyAEVMzA5OvwWug==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.10.2.tgz", + "integrity": "sha512-E+kTHlGgtitPPu8Rci0E4XBasirKtTn6DjqFn8tTLp/7xCUzqb6lig9Il+HLkcudzKvT/aLxJbzbyNCe03w1AA==", "dev": true, "requires": { "@types/core-js": "0.9.46", "@types/mkdirp": "0.3.29", - "@types/node": "6.0.66", + "@types/node": "9.4.7", + "@types/rimraf": "0.0.28", + "is-wsl": "1.1.0", "lighthouse-logger": "1.0.1", "mkdirp": "0.5.1", "rimraf": "2.6.2" } }, "chrome-remote-interface": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.23.3.tgz", - "integrity": "sha512-Bj3zMOEqJNVOll/5LrtvSdpbXSsCiSdnSQPmKUQDmAofahHczR3Qp5VJaAKrhNC/nlv9jj74aYzxTUPKrez8rA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.25.5.tgz", + "integrity": "sha512-JACehSDwNwanDgWIO1Nvji9Td4KyCUUbQze10dNb8DAG72LmqH3uz7vdgujFKjmax8Q6yu1Xwapb8GODZykTDQ==", "dev": true, "requires": { - "commander": "2.1.0", - "ws": "2.0.3" + "commander": "2.11.0", + "ws": "3.3.3" } }, "chromy": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/chromy/-/chromy-0.5.7.tgz", - "integrity": "sha512-XyK4NQkspOhEIALiO0pUhFjaUjVV0WnYqL79U1tQpcu31O/aRWCYi5m56PjqMKFeDYaLo8wWTWeKFRILKPOatA==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/chromy/-/chromy-0.5.11.tgz", + "integrity": "sha512-SBz5/xPYgeQiwFGMixPNQcbgnzsRHGCJnZKNJ5S0SmauSUY77/mqA8NjotQa12SZ3tZy0NX2gyGP41BAUWI6Rg==", "dev": true, "requires": { "async-chain-proxy": "0.1.5", "babel-runtime": "6.26.0", - "chrome-launcher": "0.4.0", - "chrome-remote-interface": "0.23.3", + "chrome-launcher": "0.10.2", + "chrome-remote-interface": "0.25.5", "jimp": "0.2.28", "uuid": "3.2.1" } @@ -1580,9 +1625,9 @@ } }, "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", "dev": true }, "component-bind": { @@ -1665,8 +1710,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.0", @@ -1953,7 +1997,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -3320,8 +3363,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.1.3", @@ -4394,7 +4436,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -5687,7 +5728,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -5696,8 +5736,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", @@ -7011,7 +7050,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.0.1.tgz", "integrity": "sha1-8HPYP3rLyWcpvxAKEhyPAGmRrmE=", - "dev": true, "requires": { "debug": "2.6.9" } @@ -7717,7 +7755,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "1.1.8" } @@ -7763,7 +7800,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -7771,8 +7807,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -7846,8 +7881,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multicast-dns": { "version": "6.2.3", @@ -8814,7 +8848,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } @@ -9219,8 +9252,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -10153,7 +10185,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, "requires": { "glob": "7.1.2" } @@ -11671,8 +11702,7 @@ "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "umd": { "version": "3.0.1", @@ -12788,15 +12818,16 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-2.0.3.tgz", - "integrity": "sha1-Uy/UmcP319cg5UPx+AcQbPxX2cs=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", "ultron": "1.1.1" } }, diff --git a/uk.co.compucorp.civicrm.hrcore/package.json b/uk.co.compucorp.civicrm.hrcore/package.json index 29d22956599..bc921ef5ec6 100644 --- a/uk.co.compucorp.civicrm.hrcore/package.json +++ b/uk.co.compucorp.civicrm.hrcore/package.json @@ -7,6 +7,7 @@ "devDependencies": { "ansi-colors": "^1.0.1", "backstopjs": "^3.1.19", + "chromy": "^0.5.11", "civicrm-scssroot": "git://github.com/totten/civicrm-scssroot.git#v0.1.1", "detect-installed": "^2.0.4", "es6-promise": "^4.2.2", From dcd6cded4bdcb731e28da03c4f2ae034898c2184 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 13:25:28 +0100 Subject: [PATCH 012/251] PCHR-3221: Add chromy scripts for leave requests (admin) --- .../leave-requests/leave-requests-with-filters.js | 10 ++++++++++ .../leave-requests/leave-requests.js | 7 +++++++ .../page-objects/leave-absence-dashboard.js | 2 +- .../backstop_data/page-objects/tabs/leave-requests.js | 8 ++------ 4 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js new file mode 100644 index 00000000000..213df2e9148 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-dashboard'); + +module.exports = function (chromy) { + page.init(chromy).openTab('leave-requests') + .then(function (requestTab) { + requestTab.showFilters(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js new file mode 100644 index 00000000000..dfdc299b967 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-dashboard'); + +module.exports = function (chromy) { + page.init(chromy).openTab('leave-requests'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js index 9dfb0505953..6a8999e5942 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js @@ -16,7 +16,7 @@ module.exports = (function () { return new Promise(function (resolve) { chromy.click('[ui-sref="' + tab.tabUiSref + '"]'); - chromy.wait(tab.readySelector); + chromy.waitUntilVisible(tab.readySelector); chromy.wait(500); resolve(tab); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js index 2bdfbe47434..f5e2bc660ee 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js @@ -9,12 +9,8 @@ module.exports = (function () { * Shows filters */ showFilters: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_manage_leave_requests__filter'); - casper.waitUntilVisible('.chr_manage_leave_requests__sub-header'); - }); + this.chromy.click('.chr_manage_leave_requests__filter'); + this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header'); } }); })(); From a5e963e4c5fd69ceb98282c91deb5a6eacbc191b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 14:46:39 +0100 Subject: [PATCH 013/251] PCHR-3221: Add chromy scripts for onboarding wizard --- .../leave-balances/leave-balances.js | 7 ++ .../chromy/onboarding-wizard/address.js | 7 ++ .../chromy/onboarding-wizard/contact.js | 7 ++ .../chromy/onboarding-wizard/dependents.js | 7 ++ .../onboarding-wizard/emergency_contact.js | 7 ++ .../chromy/onboarding-wizard/payroll.js | 7 ++ .../onboarding-wizard/profile_picture.js | 7 ++ .../manager/leave-balances.js | 7 ++ .../page-objects/onboarding-wizard.js | 68 ++++++------------- ...e-absences-manager-leave-balance-report.js | 2 +- 10 files changed, 79 insertions(+), 47 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js new file mode 100644 index 00000000000..5a116374f57 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/leave-absence-dashboard'); + +module.exports = function (chromy) { + page.init(chromy).openTab('leave-balances'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js new file mode 100644 index 00000000000..c3bdc4dee08 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/onboarding-wizard'); + +module.exports = function (chromy) { + page.init(chromy).reachAddressPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js new file mode 100644 index 00000000000..6a5d1e9661f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/onboarding-wizard'); + +module.exports = function (chromy) { + page.init(chromy).reachContactInfoPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js new file mode 100644 index 00000000000..df84a693988 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/onboarding-wizard'); + +module.exports = function (chromy) { + page.init(chromy).reachDependentPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js new file mode 100644 index 00000000000..c7a89ac569d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/onboarding-wizard'); + +module.exports = function (chromy) { + page.init(chromy).reachEmergencyContactPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js new file mode 100644 index 00000000000..664f376c283 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/onboarding-wizard'); + +module.exports = function (chromy) { + page.init(chromy).reachPayrollPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js new file mode 100644 index 00000000000..0800fc2c75d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/onboarding-wizard'); + +module.exports = function (chromy) { + page.init(chromy).reachProfilePicturePage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js new file mode 100644 index 00000000000..c2c42f71a21 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); + +module.exports = function (chromy) { + page.init(chromy); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js index 37ba0581ed4..45c1667f331 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js @@ -1,5 +1,4 @@ var page = require('./page'); -var data = require('./../data/onboarding-wizard-data'); module.exports = (function () { return page.extend({ @@ -9,11 +8,8 @@ module.exports = (function () { * @return {*} */ reachAddressPage: function () { - var casper = this.casper; - - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Address"]'); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Address"]'); }, /** @@ -22,13 +18,9 @@ module.exports = (function () { * @return {*} */ reachContactInfoPage: function () { - var casper = this.casper; - - return this.reachAddressPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Contact Info"]'); - }); + this.reachAddressPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Contact Info"]'); }, /** @@ -37,13 +29,9 @@ module.exports = (function () { * @return {*} */ reachPayrollPage: function () { - var casper = this.casper; - - return this.reachContactInfoPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Payroll"]'); - }); + this.reachContactInfoPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Payroll"]'); }, /** @@ -52,13 +40,9 @@ module.exports = (function () { * @return {*} */ reachEmergencyContactPage: function () { - var casper = this.casper; - - return this.reachPayrollPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Emergency Contact"]'); - }); + this.reachPayrollPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Emergency Contact"]'); }, /** @@ -67,15 +51,10 @@ module.exports = (function () { * @return {*} */ reachDependentPage: function () { - var casper = this.casper; - - return this.reachEmergencyContactPage().then(function () { - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Dependants"]', function () { - casper.click('#edit-submitted-do-you-have-dependants-1'); - }); - }); + this.reachEmergencyContactPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Dependants"]'); + this.chromy.click('#edit-submitted-do-you-have-dependants-1'); }, /** @@ -84,16 +63,13 @@ module.exports = (function () { * @return {*} */ reachProfilePicturePage: function () { - var casper = this.casper; - return this.reachDependentPage().then(function () { - casper.waitUntilVisible('.webform-component-fieldset', function () { - casper.fillSelectors('form.webform-client-form', data.dependents, false); - - casper.click('.webform-next'); - - return casper.waitForSelector('input[value="Profile Picture"]'); - }); - }); + this.reachDependentPage(); + this.chromy.waitUntilVisible('.webform-component-fieldset'); + this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); + this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001', '1234'); + this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010', 'sibling'); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Profile Picture"]'); } }); })(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js index 4b7b43ab88a..fa43b3c6501 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js @@ -6,7 +6,7 @@ module.exports = (function () { * Wait for the page to be ready */ waitForReady: function () { - this.waitUntilVisible('.chr_leave-balance-tab'); + this.chromy.waitUntilVisible('.chr_leave-balance-tab'); } }); })(); From 699f00b31b780ecbdca8a2d978b88fd1e512e649 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 14:50:42 +0100 Subject: [PATCH 014/251] PCHR-3221: Add chromy scripts for hr resources --- .../chromy/ssp/hr-resources-see-resources.js | 7 +++++++ .../backstop_data/page-objects/ssp/hr-resources.js | 8 ++------ 2 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js new file mode 100644 index 00000000000..fa2ea19da82 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp/hr-resources'); + +module.exports = function (chromy) { + page.init(chromy).seeResources(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js index 2872efa75f6..c6d7301f9f5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js @@ -9,12 +9,8 @@ module.exports = (function () { * @return {object} */ seeResources: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.fieldset-title'); - casper.wait(2000); // wait for animation to complete - }.bind(this)); + this.chromy.click('.fieldset-title'); + this.chromy.wait(2000); // wait for animation to complete return this; } From 35e483452744c7a31dcd500731f304a85b58590b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 14:53:11 +0100 Subject: [PATCH 015/251] PCHR-3221: Add chromy scripts for vacancies --- .../engine_scripts/chromy/ssp/vacancies-more-details.js | 7 +++++++ .../backstop_data/page-objects/ssp/vacancies.js | 8 ++------ 2 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js new file mode 100644 index 00000000000..bd2d773074e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp/vacancies'); + +module.exports = function (chromy) { + page.init(chromy).showMoreDetails(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js index 68cd1254d0b..9538e2b2162 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js @@ -9,12 +9,8 @@ module.exports = (function () { * @return {object} */ showMoreDetails: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.fieldset-title'); - casper.wait(2000); - }.bind(this)); + this.chromy.click('.fieldset-title'); + this.chromy.wait(2000); return this; } From bb8756e6ce3c5fc6170c8e051ffa99297b451d01 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 14:59:53 +0100 Subject: [PATCH 016/251] PCHR-3221: Add chromy scripts for manage leave calendar --- .../manager/manager-leave-calendar_all-contacts.js | 7 +++++++ ...manager-leave-calendar_current-month-visible.js | 7 +++++++ .../manager-leave-calendar_legend-expanded.js | 7 +++++++ .../ssp-leave-absences-manager-leave-calendar.js | 14 +++----------- 4 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js new file mode 100644 index 00000000000..cb55d4c0ba7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +module.exports = function (chromy) { + page.init(chromy).toggleContactsWithLeaves(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js new file mode 100644 index 00000000000..580870be5a5 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +module.exports = function (chromy) { + page.init(chromy); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js new file mode 100644 index 00000000000..9d2fbe7950e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +module.exports = function (chromy) { + page.init(chromy).toggleLegend(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js index c783842615d..c6c0de26c69 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js @@ -7,7 +7,7 @@ module.exports = (function () { * the visibility of a leave calendar item element */ waitForReady: function () { - this.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); + this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); }, /** @@ -16,11 +16,7 @@ module.exports = (function () { * @return {Promise} */ toggleLegend: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_leave-calendar__legend__title'); - }); + this.chromy.click('.chr_leave-calendar__legend__title'); return this; }, @@ -31,11 +27,7 @@ module.exports = (function () { * @return {Promise} */ toggleContactsWithLeaves: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_leave-calendar__toggle-contacts-with-leaves'); - }); + this.chromy.click('.chr_leave-calendar__toggle-contacts-with-leaves'); return this; } From aeec13d62853324e2e6708fef801f6ef6aa1e76f Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 15:13:29 +0100 Subject: [PATCH 017/251] PCHR-3221: Add chromy scripts for manage requests as admin in ssp --- .../admin/manager-leave-requests-all-requests.js | 9 +++++++++ .../admin/manager-leave-requests.js | 9 +++++++++ .../ssp-leave-absences-manager-leave-requests.js | 15 ++++++--------- 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js new file mode 100644 index 00000000000..0f778cf54e9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of Admin +// and have at least one leave request *assigned* to the Admin +module.exports = function (chromy) { + page.init(chromy).changeFilterByAssignee('all'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js new file mode 100644 index 00000000000..698604b2a5f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of Admin +// and have at least one leave request *assigned* to the Admin +module.exports = function (chromy) { + page.init(chromy); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js index f8de09a4b15..d1ab66ee833 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js @@ -11,7 +11,7 @@ module.exports = (function () { * @return {Object} this object */ waitForReady: function () { - this.waitUntilVisible('tbody tr:nth-child(1) a'); + this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); }, /** * Change the filter by Assignee @@ -20,16 +20,13 @@ module.exports = (function () { * @return {Object} this object */ changeFilterByAssignee: function (type) { - var casper = this.casper; var filters = ['me', 'unassigned', 'all']; - casper.then(function () { - casper.click( - '.chr_manage_leave_requests__assignee_filter button:nth-of-type(' + - (filters.indexOf(type) + 1) + - ')'); - casper.waitUntilVisible('tbody tr:nth-child(1) a'); - }); + this.chromy.click( + '.chr_manage_leave_requests__assignee_filter button:nth-of-type(' + + (filters.indexOf(type) + 1) + + ')'); + this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); return this; }, From 5685579d5de84464f4cb083fe1e9ce87ba5359b3 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 16:09:36 +0100 Subject: [PATCH 018/251] PCHR-3221: Add chromy scripts for manage requests --- .../leave-requests-of-staff-edit-sickness.js | 11 +++ .../leave-requests-of-staff-edit-toil.js | 11 +++ .../leave-requests-on-behalf-of-staff.js | 8 ++ .../manager/leave-requests-show-actions.js | 8 ++ .../manager/leave-requests-with-filters.js | 8 ++ .../manager/leave-requests-without-filters.js | 8 ++ .../sick-requests-on-behalf-of-staff.js | 8 ++ .../toil-requests-on-behalf-of-staff.js | 8 ++ ...p-leave-absences-manager-leave-requests.js | 86 ++++++++----------- 9 files changed, 106 insertions(+), 50 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js new file mode 100644 index 00000000000..ef7e58506ea --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js @@ -0,0 +1,11 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one sickness request +module.exports = function (chromy) { + page.init(chromy) + .openLeaveTypeFor(3) + .openActionsForRow(1) + .editRequest(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js new file mode 100644 index 00000000000..fadeca15ee3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js @@ -0,0 +1,11 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one toil request +module.exports = function (chromy) { + page.init(chromy) + .openLeaveTypeFor(2) + .openActionsForRow(1) + .editRequest(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js new file mode 100644 index 00000000000..08055fb2c77 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager +module.exports = function (chromy) { + page.init(chromy).applyLeaveForStaff('leave'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js new file mode 100644 index 00000000000..075a3078b67 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one leave request +module.exports = function (chromy) { + page.init(chromy).openActionsForRow(1); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js new file mode 100644 index 00000000000..9825cb9ec10 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one leave request +module.exports = function (chromy) { + page.init(chromy).expandFilter(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js new file mode 100644 index 00000000000..3db274dcb84 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one leave request +module.exports = function (chromy) { + page.init(chromy); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js new file mode 100644 index 00000000000..540a0c0dd88 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager +module.exports = function (chromy) { + page.init(chromy).applyLeaveForStaff('sickness'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js new file mode 100644 index 00000000000..ff974157d6d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager +module.exports = function (chromy) { + page.init(chromy).applyLeaveForStaff('toil'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js index d1ab66ee833..bc7bd57f8b7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js @@ -1,6 +1,5 @@ /* global Event */ -var Promise = require('es6-promise').Promise; var page = require('./page'); module.exports = (function () { @@ -8,11 +7,13 @@ module.exports = (function () { /** * Wait for the page to be ready as it waits for the actions of the first * row of leave requests to be visible + * * @return {Object} this object */ waitForReady: function () { this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); }, + /** * Change the filter by Assignee * @@ -30,98 +31,83 @@ module.exports = (function () { return this; }, + /** * Opens the dropdown for manager actions like edit/respond, cancel. + * * @param {Number} row number corresponding to leave request in the list * @return {Object} this object */ openActionsForRow: function (row) { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); - }); + this.chromy.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); return this; }, + /** * Expands filters on screen + * * @return {Object} this object */ expandFilter: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.chr_manage_leave_requests__filter'); - casper.waitUntilVisible('.chr_manage_leave_requests__sub-header div:nth-child(1)'); - }); + this.chromy.click('.chr_manage_leave_requests__filter'); + this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header div:nth-child(1)'); return this; }, + /** * Opens leave type filter + * * @param {Number} leaveType index like 1 for Holiday/Vacation, 2 for TOIL, 3 for Sickness * @return {Object} this object */ openLeaveTypeFor: function (leaveType) { - var casper = this.casper; - - casper.then(function () { - casper.evaluate(function (leaveType) { - var element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); - element.selectedIndex = leaveType;// for TOIL option - element.dispatchEvent(new Event('change')); - }, leaveType); + this.chromy.evaluate(function (leaveType) { + var element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); - return casper.waitUntilVisible('tbody tr:nth-child(1) a'); - }); + element.selectedIndex = leaveType;// for TOIL option + element.dispatchEvent(new Event('change')); + }, [leaveType]); + this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); return this; }, + /** * User clicks on the edit/respond action + * * @param {Number} row number corresponding to leave request in the list * @return {Promise} */ editRequest: function (row) { - var casper = this.casper; - - return new Promise(function (resolve) { - casper.then(function () { - casper.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - // as there are multiple spinners it takes more time to load up - casper.waitWhileVisible('.modal-content .spinner:nth-child(1)'); - - return casper.waitWhileVisible('leave-request-popup-details-tab .spinner'); - }); + this.chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('leave-request-popup-details-tab .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); + + return this; }, + /** * Apply leave on behalf of staff * @param {String} row number corresponding to leave request in the list like leave, sickness or toil * @return {Promise} */ applyLeaveForStaff: function (leaveType) { - var casper = this.casper; - - return new Promise(function (resolve) { - casper.then(function () { - var selector = '.button-container leave-request-record-actions .dropdown-toggle'; - - casper.click(selector); - }); - - casper.then(function () { - var leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; + var leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; - casper.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); - }); + this.chromy.click('.button-container leave-request-record-actions .dropdown-toggle'); + this.chromy.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); - casper.then(function () { - // as there are multiple spinners it takes more time to load up - resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); - }.bind(this)); - }.bind(this)); + this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); } }); })(); From be60cc5a2d995c94de0deff096c131cef2a719af Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 16:42:37 +0100 Subject: [PATCH 019/251] PCHR-3221: Add chromy scripts for my leave calendar --- ...my-leave-calendar_current-month-visible.js | 7 +++++ .../staff/my-leave-calendar_tooltip.js | 7 +++++ .../ssp-leave-absences-my-leave-calendar.js | 29 ++++++++++--------- 3 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js new file mode 100644 index 00000000000..7e6a674cb82 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-calendar'); + +module.exports = function (chromy) { + page.init(chromy); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js new file mode 100644 index 00000000000..8e205d09a91 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-calendar'); + +module.exports = function (chromy) { + page.init(chromy).showTooltip(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js index c451c5c7d63..5d45fe25410 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js @@ -1,4 +1,4 @@ -/* globals jQuery */ +/* globals jQuery, MouseEvent */ var page = require('./page'); @@ -11,7 +11,7 @@ module.exports = (function () { * @returns {Object} - returns a reference to the page object. */ clearCurrentlySelectedMonth: function () { - this.casper.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); + this.chromy.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); return this; }, @@ -25,11 +25,11 @@ module.exports = (function () { * @returns {Object} - returns a reference to the page object. */ showMonth: function (monthName) { - this.casper.click('.chr_leave-calendar__day-selector input'); - this.casper.evaluate(function (monthName) { + this.chromy.click('.chr_leave-calendar__day-selector input'); + this.chromy.evaluate(function (monthName) { jQuery('.ui-select-choices-row:contains(' + monthName + ')').click(); - }, monthName); - this.waitUntilVisible('leave-calendar-month leave-calendar-day'); + }, [monthName]); + this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); return this; }, @@ -41,10 +41,13 @@ module.exports = (function () { * @returns {Object} - returns a reference to the page object. */ showTooltip: function () { - this.casper.then(function () { - this.mouse.move('.chr_leave-calendar__item a'); + var chromy = this.chromy; + + chromy.evaluate(function () { + var event = new MouseEvent('mouseover'); + document.querySelector('.chr_leave-calendar__item a').dispatchEvent(event); }); - this.waitUntilVisible('.tooltip'); + chromy.waitUntilVisible('.tooltip'); return this; }, @@ -56,13 +59,13 @@ module.exports = (function () { * @returns {Object} - returns a reference to the page object. */ showYear: function (year) { - this.casper.evaluate(function (year) { + this.chromy.evaluate(function (year) { var select = jQuery('.chr_manager_calendar__sub-header select'); var yearValue = select.find('option:contains(' + year + ')').attr('value'); select.val(yearValue).change(); - }, year); - this.waitUntilVisible('leave-calendar-month leave-calendar-day'); + }, [year]); + this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); return this; }, @@ -72,7 +75,7 @@ module.exports = (function () { * the visibility of a leave calendar item element */ waitForReady: function () { - this.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); + this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); } }); })(); From 66b7d19f898c329ed3928fc93e06a5a42dba3e78 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 15 Mar 2018 17:33:56 +0100 Subject: [PATCH 020/251] PCHR-3221: Add chromy scripts for my leave request modal --- ...st-modal-show-deduction-fields-expanded.js | 16 +++ ...ave-request-modal-show-deduction-fields.js | 14 +++ .../staff/my-report-pending-show-comments.js | 13 +++ .../staff/my-report-show-absence-in-hours.js | 10 ++ .../page-objects/modals/ssp-leave-request.js | 6 +- .../ssp-leave-absences-my-leave-report.js | 109 +++++++----------- 6 files changed, 97 insertions(+), 71 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js new file mode 100644 index 00000000000..78ee0d3b586 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js @@ -0,0 +1,16 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have a current absence period +module.exports = function (chromy) { + page.init(chromy) + .newRequest('leave') + .selectRequestAbsenceType('Holiday in Hours') + .changeRequestDaysMode('multiple') + .selectRequestDate('from', 2, 1) + .selectRequestDate('to', 2, 2) + .waitUntilRequestBalanceIsCalculated() + .expandDeductionField('from') + .expandDeductionField('to'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js new file mode 100644 index 00000000000..f6382708821 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js @@ -0,0 +1,14 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have a current absence period +module.exports = function (chromy) { + page.init(chromy) + .newRequest('leave') + .selectRequestAbsenceType('Holiday in Hours') + .changeRequestDaysMode('multiple') + .selectRequestDate('from', 2, 1) + .selectRequestDate('to', 2, 2) + .waitUntilRequestBalanceIsCalculated(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js new file mode 100644 index 00000000000..3f304983f1d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have the first leave request on the pending list with at least a comment +module.exports = function (chromy) { + page.init(chromy) + .openSection('pending') + .openActionsForRow() + .editRequest().then(function (modal) { + modal.selectTab('Comments'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js new file mode 100644 index 00000000000..1a8b3048be6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have the absence type in *hours* with a label "Holiday in Hours" +module.exports = function (casper) { + page.init(casper) + .newRequest('leave') + .selectRequestAbsenceType('Holiday in Hours'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js index 27717801f8c..fea763c9f5e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js @@ -9,11 +9,7 @@ module.exports = (function () { * @return {Object} this object */ selectTab: function (tabName) { - var casper = this.casper; - - casper.then(function () { - casper.click('div.chr_leave-request-modal__tab li[heading=\'' + tabName + '\'] a'); - }); + this.chromy.click('div.chr_leave-request-modal__tab li[heading=\'' + tabName + '\'] a'); return this; } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js index 3653bab3874..2e8a4390f42 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js @@ -14,12 +14,9 @@ module.exports = (function () { * @return {Promise} */ changeRequestDaysMode: function (mode) { - var casper = this.casper; var optionIndex = ['multiple', 'single'].indexOf(mode) + 1; - casper.then(function () { - casper.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); - }); + this.chromy.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); return this; }, @@ -31,16 +28,22 @@ module.exports = (function () { * @return {Promise} */ editRequest: function (row) { - var casper = this.casper; + var chromy = this.chromy; return new Promise(function (resolve) { - casper.then(function () { - casper.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - // As there are multiple spinners it takes more time to load up - casper.waitWhileVisible('.modal-content .spinner:nth-child(1)'); - casper.waitWhileVisible('leave-request-popup-details-tab .spinner'); - resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); - }.bind(this)); + chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('leave-request-popup-details-tab .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + + resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); }.bind(this)); }, @@ -51,14 +54,10 @@ module.exports = (function () { * @return {Promise} */ expandDeductionField: function (type) { - var casper = this.casper; var fieldSelector = '[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"] a'; - casper.then(function () { - casper.waitForSelector(fieldSelector, function () { - casper.click(fieldSelector); - }); - }); + this.chromy.wait(fieldSelector); + this.chromy.click(fieldSelector); return this; }, @@ -70,19 +69,15 @@ module.exports = (function () { * @return {Promise} */ newRequest: function (requestType) { - var casper = this.casper; var requestTypes = ['leave', 'sickness', 'toil']; // must be in the same quantity and order as in UI var requestTypeButtonIndex = requestTypes.indexOf(requestType) + 1; var actionDropdownSelector = 'leave-request-record-actions'; - var actionButtonSelector = actionDropdownSelector + ' .dropdown-menu a:nth-child(' + requestTypeButtonIndex + ')'; + var actionButtonSelector = actionDropdownSelector + ' .dropdown-menu li:nth-child(' + requestTypeButtonIndex + ') a'; - casper.then(function () { - casper.click(actionDropdownSelector + ' [uib-dropdown] > button'); - casper.waitForSelector(actionButtonSelector, function () { - casper.click(actionButtonSelector); - casper.waitUntilVisible('.chr_leave-request-modal__tab .form-group'); - }); - }); + this.chromy.click(actionDropdownSelector + ' [uib-dropdown] > button'); + this.chromy.wait(actionButtonSelector); + this.chromy.click(actionButtonSelector); + this.chromy.waitUntilVisible('.chr_leave-request-modal__tab .form-group'); return this; }, @@ -94,13 +89,8 @@ module.exports = (function () { * @return {Object} this object */ openActionsForRow: function (row) { - var casper = this.casper; - - casper.then(function () { - casper.waitForSelector('tr:nth-child(1) div[uib-dropdown] a:nth-child(1)', function () { - casper.click('div:nth-child(2) > div > table > tbody > tr:nth-child(' + (row || 1) + ') div[uib-dropdown] a:nth-child(1)'); - }); - }); + this.chromy.wait('tr:nth-child(1) div[uib-dropdown] a:nth-child(1)'); + this.chromy.click('div:nth-child(2) > div > table > tbody > tr:nth-child(' + (row || 1) + ') div[uib-dropdown] a:nth-child(1)'); return this; }, @@ -112,11 +102,11 @@ module.exports = (function () { * @return {Object} this object */ openSection: function (section) { - var casper = this.casper; - - casper.then(function () { - casper.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); - casper.waitWhileVisible('.spinner'); + this.chromy.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); return this; @@ -129,19 +119,14 @@ module.exports = (function () { * @return {Promise} */ selectRequestAbsenceType: function (absenceTypeLabel) { - var absenceTypeSelect; - var casper = this.casper; - - casper.then(function () { - casper.evaluate(function (absenceTypeLabel) { - absenceTypeSelect = document.querySelector('[name=absenceTypeSelect]'); - - absenceTypeSelect.selectedIndex = _.findIndex(absenceTypeSelect.querySelectorAll('option'), function (option) { - return option.text.search(absenceTypeLabel) !== -1; - }); // Select the needed option - absenceTypeSelect.dispatchEvent(new Event('change')); // Trigger onChange event - }, absenceTypeLabel); - }); + this.chromy.evaluate(function (absenceTypeLabel) { + var absenceTypeSelect = document.querySelector('[name=absenceTypeSelect]'); + + absenceTypeSelect.selectedIndex = _.findIndex(absenceTypeSelect.querySelectorAll('option'), function (option) { + return option.text.search(absenceTypeLabel) !== -1; + }); // Select the needed option + absenceTypeSelect.dispatchEvent(new Event('change')); // Trigger onChange event + }, [absenceTypeLabel]); return this; }, @@ -155,17 +140,13 @@ module.exports = (function () { * @return {Promise} */ selectRequestDate: function (type, weekPosition, weekDayPosition) { - var casper = this.casper; var daySelector = '.uib-daypicker tr:nth-child(' + weekPosition + ') td:nth-child( ' + weekDayPosition + ') button'; - casper.then(function () { - casper.click('[ng-model="detailsTab.uiOptions.' + type + 'Date"]'); - casper.waitForSelector(daySelector, function () { - casper.click(daySelector); - casper.waitUntilVisible('[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"]'); - }); - }); + this.chromy.click('[ng-model="detailsTab.uiOptions.' + type + 'Date"]'); + this.chromy.wait(daySelector); + this.chromy.click(daySelector); + this.chromy.waitUntilVisible('[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"]'); return this; }, @@ -176,7 +157,7 @@ module.exports = (function () { * @return {Object} this object */ waitForReady: function () { - this.waitUntilVisible('td[ng-click="report.toggleSection(\'pending\')"]'); + this.chromy.waitUntilVisible('td[ng-click="report.toggleSection(\'pending\')"]'); }, /** @@ -185,11 +166,7 @@ module.exports = (function () { * @return {Promise} */ waitUntilRequestBalanceIsCalculated: function () { - var casper = this.casper; - - casper.then(function () { - casper.waitUntilVisible('[ng-show="detailsTab.uiOptions.showBalance"]'); - }); + this.chromy.waitUntilVisible('[ng-show="detailsTab.uiOptions.showBalance"]'); return this; } From 56f329d6d2b9002ae6b774dfc444bbf9c68b6cc9 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 10:38:06 +0100 Subject: [PATCH 021/251] PCHR-3221: Add chromy scripts for my leave report --- .../chromy/ssp-leave-absences/staff/my-report.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js new file mode 100644 index 00000000000..0ed50e44777 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have at least one pending leave request +module.exports = function (chromy) { + page.init(chromy).openSection('pending'); +}; From 8aff93fe4aa952724e0279a3f07808fb5c0356a9 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 10:41:08 +0100 Subject: [PATCH 022/251] PCHR-3221: Add chromy scripts for edit my details modal --- .../engine_scripts/chromy/ssp/edit-my-details.js | 7 +++++++ .../backstop_data/page-objects/ssp/my-details.js | 10 +++------- 2 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js new file mode 100644 index 00000000000..94323b8ab10 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp/my-details'); + +module.exports = function (chromy) { + page.init(chromy).showEditMyDetailsPopup(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js index bc46f0eb76f..018f5c97d9b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js @@ -6,15 +6,11 @@ module.exports = (function () { /** * Opens Edit My Details Popup * - * @return {object} + * @return {Object} */ showEditMyDetailsPopup: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('[href="/my_details/nojs/view"]'); - casper.waitUntilVisible('.modal-civihr-custom__section'); - }.bind(this)); + this.chromy.click('[href="/my_details/nojs/view"]'); + this.chromy.waitUntilVisible('.modal-civihr-custom__section'); return this; } From c43e642f406b35e52e0f8818aedf5d8db89f36d8 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 10:45:42 +0100 Subject: [PATCH 023/251] PCHR-3221: Add chromy scripts for ssp tasks --- .../chromy/ssp/tasks-create-new-task.js | 7 ++++++ .../chromy/ssp/tasks-show-completed-tasks.js | 7 ++++++ .../backstop_data/page-objects/ssp/tasks.js | 22 ++++++++----------- 3 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js new file mode 100644 index 00000000000..d37048209d2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp/tasks'); + +module.exports = function (chromy) { + page.init(chromy).openCreateNewTaskModal(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js new file mode 100644 index 00000000000..4d1039508c0 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp/tasks'); + +module.exports = function (chromy) { + page.init(chromy).openCompletedTasksModal(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js index 07a6ac752f9..5a55b282dd5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js @@ -1,4 +1,4 @@ -var modal = require('./../page'); +var modal = require('../page'); module.exports = (function () { return modal.extend({ @@ -7,25 +7,21 @@ module.exports = (function () { * Opens Completed tasks modal */ openCompletedTasksModal: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.pane-views-tasks-block a.show-complete-tasks'); - casper.waitWhileVisible('.loading-spinner'); - casper.waitUntilVisible('.view-Tasks'); + this.chromy.click('.pane-views-tasks-block a.show-complete-tasks'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.loading-spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); + this.chromy.waitUntilVisible('.view-Tasks'); }, /** * Opens Create New Task modal */ openCreateNewTaskModal: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.create-new-task'); - casper.waitUntilVisible('#civihr-employee-portal-civi-tasks-form'); - }); + this.chromy.click('.create-new-task'); + this.chromy.waitUntilVisible('#civihr-employee-portal-civi-tasks-form'); } }); })(); From dcb6836792d038a721abe6ca565f9e8fced9cd07 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 11:13:48 +0100 Subject: [PATCH 024/251] PCHR-3221: Add chromy scripts for documents --- .../chromy/documents/advanced-filters.js | 7 ++++ .../chromy/documents/document/add.js | 7 ++++ .../documents/document/pick-due-date.js | 9 +++++ .../documents/document/select-assignee.js | 9 +++++ .../chromy/documents/document/select-type.js | 9 +++++ .../documents/document/show-all-fields.js | 9 +++++ .../backstop_data/page-objects/documents.js | 20 +++------- .../page-objects/modals/document.js | 38 +++++-------------- 8 files changed, 64 insertions(+), 44 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js new file mode 100644 index 00000000000..77978a1fe17 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/documents'); + +module.exports = function (chromy) { + page.init(chromy).advancedFilters(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js new file mode 100644 index 00000000000..54f4d38c74a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/documents'); + +module.exports = function (chromy) { + page.init(chromy).addDocument(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js new file mode 100644 index 00000000000..05bd90013a6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/documents'); + +module.exports = function (chromy) { + page.init(chromy).addDocument().then(function (modal) { + modal.showTab('Assignments').pickDueDate(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js new file mode 100644 index 00000000000..c639f109453 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/documents'); + +module.exports = function (chromy) { + page.init(chromy).addDocument().then(function (modal) { + modal.showTab('Assignments').showField('Assignee').selectAssignee(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js new file mode 100644 index 00000000000..78bd7947eba --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/documents'); + +module.exports = function (chromy) { + page.init(chromy).addDocument().then(function (modal) { + modal.selectType(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js new file mode 100644 index 00000000000..a27c1b8b207 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/documents'); + +module.exports = function (chromy) { + page.init(chromy).addDocument().then(function (modal) { + modal.showTab('Assignments').showField('Assignee').showField('Assignment'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js index a5f9ddddc4c..b361857dea3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js @@ -12,13 +12,9 @@ module.exports = (function () { * @return {Promise} resolves with the document modal page object */ addDocument: function () { - var casper = this.casper; - return new Promise(function (resolve) { - casper.then(function () { - casper.click('a[ng-click*="itemAdd"]'); - resolve(this.waitForModal('document')); - }.bind(this)); + this.chromy.click('a[ng-click*="itemAdd"]'); + resolve(this.waitForModal('document')); }.bind(this)); }, @@ -28,12 +24,8 @@ module.exports = (function () { * @return {object} */ advancedFilters: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - casper.wait(500); - }); + this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); + this.chromy.wait(500); return this; }, @@ -89,9 +81,7 @@ module.exports = (function () { * Waits until the specified select is visible on the page */ waitForReady: function () { - var casper = this.casper; - - casper.waitUntilVisible('.ct-filter-date'); + this.chromy.waitUntilVisible('.ct-filter-date'); } }); })(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js index 370e8de8664..1c1e5b5a626 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js @@ -9,12 +9,8 @@ module.exports = (function () { * @return {object} */ pickDueDate: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); - casper.waitUntilVisible('.uib-datepicker-popup'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); + this.chromy.waitUntilVisible('.uib-datepicker-popup'); return this; }, @@ -26,11 +22,7 @@ module.exports = (function () { * @return {object} */ showField: function (fieldName) { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); return this; }, @@ -41,12 +33,8 @@ module.exports = (function () { * @return {object} */ selectAssignee: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); - casper.waitUntilVisible('.select2-with-searchbox'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); return this; }, @@ -57,12 +45,8 @@ module.exports = (function () { * @return {object} */ selectType: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); - casper.waitUntilVisible('.select2-with-searchbox'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); return this; }, @@ -73,12 +57,8 @@ module.exports = (function () { * @return {object} */ showTab: function (tabName) { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); - casper.wait(200); - }.bind(this)); + this.chromy.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); + this.chromy.wait(200); return this; } From b9aca69a8edabfdfe7d23307724e2d6f6ad31465 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 11:51:55 +0100 Subject: [PATCH 025/251] PCHR-3221: Add chromy scripts for tasks --- .../chromy/tasks/advanced-filters.js | 7 ++ .../chromy/tasks/assignment/add-document.js | 9 +++ .../chromy/tasks/assignment/add-task.js | 9 +++ .../chromy/tasks/assignment/add.js | 7 ++ .../chromy/tasks/assignment/pick-date.js | 9 +++ .../chromy/tasks/assignment/select-type.js | 9 +++ .../chromy/tasks/select-dates.js | 7 ++ .../chromy/tasks/task/actions.js | 7 ++ .../engine_scripts/chromy/tasks/task/add.js | 7 ++ .../chromy/tasks/task/editable-assigned.js | 7 ++ .../chromy/tasks/task/editable-date.js | 7 ++ .../chromy/tasks/task/editable-subject.js | 7 ++ .../chromy/tasks/task/editable-target.js | 7 ++ .../engine_scripts/chromy/tasks/task/open.js | 7 ++ .../chromy/tasks/task/pick-date.js | 9 +++ .../chromy/tasks/task/select-assignee.js | 9 +++ .../chromy/tasks/task/select-type.js | 9 +++ .../chromy/tasks/task/show-all-fields.js | 13 ++++ .../chromy/tasks/task/show-more.js | 7 ++ .../engine_scripts/chromy/tasks/task/task.js | 7 ++ .../page-objects/modals/assignment.js | 39 +++------- .../backstop_data/page-objects/modals/task.js | 30 ++----- .../backstop_data/page-objects/tasks.js | 78 ++++++------------- 23 files changed, 202 insertions(+), 105 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js new file mode 100644 index 00000000000..fb8f2e7b9e7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).advancedFilters(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js new file mode 100644 index 00000000000..53556ea92be --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addAssignment().then(function (modal) { + modal.selectType().addDocument(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js new file mode 100644 index 00000000000..e50e89b0146 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addAssignment().then(function (modal) { + modal.selectType().addTask(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js new file mode 100644 index 00000000000..836d3939bd2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addAssignment(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js new file mode 100644 index 00000000000..cbd1216bd41 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addAssignment().then(function (modal) { + modal.pickDate(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js new file mode 100644 index 00000000000..fbe788c5740 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addAssignment().then(function (modal) { + modal.selectType(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js new file mode 100644 index 00000000000..9a678adbc72 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).selectDates(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js new file mode 100644 index 00000000000..cef021219b2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).taskActions(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js new file mode 100644 index 00000000000..7bb3ba67ff3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addTask(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js new file mode 100644 index 00000000000..80f7d948657 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).inPlaceEdit('assigned'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js new file mode 100644 index 00000000000..e4259f12643 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).inPlaceEdit('date'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js new file mode 100644 index 00000000000..fbdd0db3ebd --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).inPlaceEdit('subject'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js new file mode 100644 index 00000000000..5321eafe166 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).inPlaceEdit('target'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js new file mode 100644 index 00000000000..36a560c835e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).openTask(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js new file mode 100644 index 00000000000..84037304b7d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addTask().then(function (modal) { + modal.pickDate(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js new file mode 100644 index 00000000000..b6241ac9602 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addTask().then(function (modal) { + modal.showField('Assignee').selectAssignee(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js new file mode 100644 index 00000000000..f3e6e561fc5 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addTask().then(function (modal) { + modal.selectType(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js new file mode 100644 index 00000000000..4ee87e4a290 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).addTask().then(function (modal) { + modal + .showField('Subject') + .showField('Assignee') + .showField('Status') + .showField('Assignment'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js new file mode 100644 index 00000000000..ff00a670e2c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy).showMore(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js new file mode 100644 index 00000000000..df123456f01 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/tasks'); + +module.exports = function (chromy) { + page.init(chromy); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js index 7c537ad14c8..00f25ef8c8f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js @@ -1,3 +1,5 @@ +/* global jQuery */ + var modal = require('./modal'); module.exports = (function () { @@ -9,11 +11,7 @@ module.exports = (function () { * @return {object} */ addDocument: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); return this; }, @@ -24,11 +22,7 @@ module.exports = (function () { * @return {object} */ addTask: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); return this; }, @@ -39,12 +33,8 @@ module.exports = (function () { * @return {object} */ pickDate: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); - casper.waitUntilVisible('.uib-datepicker-popup'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); + this.chromy.waitUntilVisible('.uib-datepicker-popup'); return this; }, @@ -55,18 +45,13 @@ module.exports = (function () { * @return {object} */ selectType: function () { - var casper = this.casper; - - casper.then(function () { - casper.evaluate(function (modalRoot) { - var select = document.querySelector(modalRoot + ' select[name="assignment"]'); - - select.selectedIndex = 2; - jQuery(select).change(); - }, this.modalRoot); + this.chromy.evaluate(function (modalRoot) { + var select = document.querySelector(modalRoot + ' select[name="assignment"]'); - casper.wait(500); - }.bind(this)); + select.selectedIndex = 2; + jQuery(select).change(); + }, [this.modalRoot]); + this.chromy.wait(500); return this; } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js index 91abd9f0025..e5355c8becb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js @@ -9,12 +9,8 @@ module.exports = (function () { * @return {object} */ pickDate: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); - casper.waitUntilVisible('.uib-datepicker-popup'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); + this.chromy.waitUntilVisible('.uib-datepicker-popup'); return this; }, @@ -26,11 +22,7 @@ module.exports = (function () { * @return {object} */ showField: function (fieldName) { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); return this; }, @@ -41,12 +33,8 @@ module.exports = (function () { * @return {object} */ selectAssignee: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); - casper.waitUntilVisible('.select2-with-searchbox'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); return this; }, @@ -57,12 +45,8 @@ module.exports = (function () { * @return {object} */ selectType: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); - casper.waitUntilVisible('.select2-with-searchbox'); - }.bind(this)); + this.chromy.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); return this; } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js index 1d18e9f4327..3d10797ea0c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js @@ -18,13 +18,9 @@ module.exports = (function () { * @return {Promise} resolves with the assignment modal page object */ addAssignment: function () { - var casper = this.casper; - return new Promise(function (resolve) { - casper.then(function () { - casper.click('a[ng-click*="modalAssignment"]'); - resolve(this.waitForModal('assignment')); - }.bind(this)); + this.chromy.click('a[ng-click*="modalAssignment"]'); + resolve(this.waitForModal('assignment')); }.bind(this)); }, @@ -34,13 +30,9 @@ module.exports = (function () { * @return {Promise} resolves with the task modal page object */ addTask: function () { - var casper = this.casper; - return new Promise(function (resolve) { - casper.then(function () { - casper.click('a[ng-click*="itemAdd"]'); - resolve(this.waitForModal('task')); - }.bind(this)); + this.chromy.click('a[ng-click*="itemAdd"]'); + resolve(this.waitForModal('task')); }.bind(this)); }, @@ -50,12 +42,8 @@ module.exports = (function () { * @return {object} */ advancedFilters: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - casper.wait(500); - }); + this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); + this.chromy.wait(500); return this; }, @@ -67,12 +55,8 @@ module.exports = (function () { * @return {object} */ inPlaceEdit: function (fieldName) { - var casper = this.casper; - - casper.then(function () { - casper.click(editableSelectors[fieldName]); - casper.wait(200); - }); + this.chromy.click(editableSelectors[fieldName]); + this.chromy.wait(200); return this; }, @@ -83,15 +67,15 @@ module.exports = (function () { * @return {Promise} resolves with the task modal page object */ openTask: function () { - var casper = this.casper; - return new Promise(function (resolve) { - casper.then(function () { - casper.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); - casper.waitWhileVisible('.spinner'); + this.chromy.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); - resolve(this.waitForModal('task')); - }.bind(this)); + resolve(this.waitForModal('task')); }.bind(this)); }, @@ -99,12 +83,8 @@ module.exports = (function () { * Shows the "select dates" filter */ selectDates: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.ct-select-dates'); - casper.wait(500); - }); + this.chromy.click('.ct-select-dates'); + this.chromy.wait(500); }, /** @@ -113,14 +93,9 @@ module.exports = (function () { * @return {object} */ showMore: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(taskSelector + ' a[ng-click*="isCollapsed"]'); - casper.waitUntilVisible(taskSelector + ' article', function () { - casper.wait(500); - }); - }); + this.chromy.click(taskSelector + ' a[ng-click*="isCollapsed"]'); + this.chromy.waitUntilVisible(taskSelector + ' article'); + this.chromy.wait(500); return this; }, @@ -131,11 +106,7 @@ module.exports = (function () { * @return {object} */ taskActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(taskSelector + ' .ct-context-menu-toggle'); - }); + this.chromy.click(taskSelector + ' .ct-context-menu-toggle'); return this; }, @@ -144,11 +115,8 @@ module.exports = (function () { * Waits until the specified select is visible on the page */ waitForReady: function () { - var casper = this.casper; - - casper.waitUntilVisible('.ct-container-inner', function () { - casper.wait(300); - }); + this.chromy.waitUntilVisible('.ct-container-inner'); + this.chromy.wait(300); } }); })(); From 2b754e25927cd338dba6ae57648240cacfd1b855 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 11:52:26 +0100 Subject: [PATCH 026/251] PCHR-3221: Show scenario name in the onBefore script --- .../backstop_data/engine_scripts/chromy/onBefore.js | 1 + .../backstop_data/engine_scripts/chromy/onReady.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js index e174ef8b424..5791e6deaf9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js @@ -1,4 +1,5 @@ module.exports = function (chromy, scenario, vp) { + console.log('SCENARIO > ' + scenario.label); require('./loadCookies')(chromy, scenario); // IGNORE ANY CERT WARNINGS diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js index 374c7163105..758a10cb201 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js @@ -1,7 +1,6 @@ var page = require('../../page-objects/contact-summary'); module.exports = function (chromy, scenario, vp) { - console.log('SCENARIO > ' + scenario.label); require('./clickAndHoverHelper')(chromy, scenario); page.init(chromy); From bc747d697867765a4af41cec692033ca10abdb69 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 13:57:04 +0100 Subject: [PATCH 027/251] PCHR-3221: Add chromy scripts for absence tab in contact summary --- .../contact-summary/absence/tab-calendar.js | 7 +++++ .../absence/tab-entitlements.js | 7 +++++ .../absence/tab-report-actions.js | 10 +++++++ .../absence/tab-report-open-section.js | 10 +++++++ .../contact-summary/absence/tab-report.js | 7 +++++ .../absence/tab-work-patterns-modal.js | 10 +++++++ .../absence/tab-work-patterns.js | 7 +++++ .../chromy/contact-summary/show-actions.js | 4 +-- .../page-objects/tabs/absence.js | 16 ++++------- .../page-objects/tabs/absence/calendar.js | 3 +-- .../page-objects/tabs/absence/entitlements.js | 26 ++++++++++-------- .../page-objects/tabs/absence/report.js | 27 ++++++++++--------- .../tabs/absence/work-patterns.js | 8 ++---- .../backstop_data/page-objects/tabs/tab.js | 4 +-- 14 files changed, 100 insertions(+), 46 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js new file mode 100644 index 00000000000..a802f565ac3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('calendar'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js new file mode 100644 index 00000000000..2694e2eb55b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('entitlements'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js new file mode 100644 index 00000000000..306cd81e8fe --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js @@ -0,0 +1,10 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('report') + .then(function (reportTab) { + reportTab.openSection('pending').showActions(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js new file mode 100644 index 00000000000..dcd37454142 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js @@ -0,0 +1,10 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('report') + .then(function (reportTab) { + reportTab.openSection('pending'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js new file mode 100644 index 00000000000..7cf60023a19 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('report'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js new file mode 100644 index 00000000000..0b4630e0b66 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js @@ -0,0 +1,10 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('work-patterns') + .then(function (workPatternsTab) { + workPatternsTab.showModal(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js new file mode 100644 index 00000000000..ecd0c5c4a7e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../../page-objects/tabs/absence'); + +module.exports = function (chromy) { + absenceTab.init(chromy).openSubTab('work-patterns'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js index 92947f379c1..b8358ffa5dc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js @@ -2,6 +2,6 @@ var page = require('../../../page-objects/contact-summary'); -module.exports = function (casper) { - page.init(casper).showActions(); +module.exports = function (chromy) { + page.init(chromy).showActions(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js index 1950b26444c..637648c1ac9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js @@ -12,17 +12,11 @@ module.exports = tab.extend({ * @return {object} resolves with the tab page object */ openSubTab: function (tabId) { - var casper = this.casper; - var tab = require('./absence/' + tabId).init(casper, false); - return new Promise(function (resolve) { - casper.then(function () { - casper.click('[heading="' + tab.tabTitle + '"] > a'); - casper.waitFor(tab.ready.bind(tab), function () { - casper.wait(500); - resolve(tab); - }); - }); - }); + var tab = require('./absence/' + tabId); + + this.chromy.click('[heading="' + tab.tabTitle + '"] > a'); + resolve(tab.init(this.chromy, false)); + }.bind(this)); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js index 6261ba64230..6008212c5f1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js @@ -3,6 +3,5 @@ var sspMyLeaveCalendar = require('../../ssp-leave-absences-my-leave-calendar'); module.exports = sspMyLeaveCalendar.extend(tab).extend({ readySelector: '.chr_leave-calendar__month-body', - tabTitle: 'Calendar', - waitForReady: null + tabTitle: 'Calendar' }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js index eaf42eb2502..edeb15e2419 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js @@ -4,21 +4,25 @@ module.exports = tab.extend({ tabTitle: 'Entitlements', /** - * Overrides the original tab's `ready` method + * Overrides the original tab's `waitForReady` method * There is no single selector that can be used as `readySelector` (which - * would be used by the original `ready` method) to detect when the + * would be used by the original `waitForReady` method) to detect when the * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it - * - * @return {Boolean} returns `true` for the `casper.waitFor()` caller */ - ready: function () { - this.casper.waitUntilVisible('contract-entitlements'); - this.casper.waitUntilVisible('annual-entitlements'); + waitForReady: function () { + this.chromy.wait('contract-entitlements'); + this.chromy.wait('annual-entitlements'); // Waits for spinners to hide which indicates the load of the data - this.casper.waitWhileVisible('contract-entitlements .spinner'); - this.casper.waitWhileVisible('annual-entitlements .spinner'); - - return true; + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('contract-entitlements .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('annual-entitlements .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js index 6d6bb8b2859..029455e60d7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js @@ -7,15 +7,22 @@ module.exports = tab.extend({ /** * Open the report section with the given name * - * @param {string} sectionName - * @return {object} + * @param {String} sectionName + * @return {Object} */ openSection: function (sectionName) { - var casper = this.casper; + this.chromy.click('[ng-click="report.toggleSection(\'' + sectionName + '\')"]'); - casper.then(function () { - casper.click('[ng-click="report.toggleSection(\'' + sectionName + '\')"]'); - casper.waitUntilVisible('.table-nested'); + // @NOTE when using chromy.waitUntilVisible(selector), it only considers + // the *first* occurrence of the selector, not *any* occurrence + // so the "wait for any of occurence of this selector" behaviour had to + // be achieved manually + this.chromy.wait(function () { + var nestedTables = document.querySelectorAll('.table-nested'); + + return Array.prototype.some.call(nestedTables, function (table) { + return table.offsetWidth > 0 && table.offsetHeight > 0; + }); }); return this; @@ -24,14 +31,10 @@ module.exports = tab.extend({ /** * Show the actions of the first leave request available * - * @return {object} + * @return {Object} */ showActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.table-nested .dropdown-toggle'); - }); + this.chromy.click('.table-nested .dropdown-toggle'); return this; } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js index 723794ede71..e8a90d36ce1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js @@ -8,11 +8,7 @@ module.exports = tab.extend({ * Shows the Custom Work Pattern modal */ showModal: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('[ng-click="workpatterns.openModal()"]'); - casper.waitUntilVisible('absence-tab-custom-work-pattern-modal .modal-body > .row'); - }); + this.chromy.click('[ng-click="workpatterns.openModal()"]'); + this.chromy.waitUntilVisible('absence-tab-custom-work-pattern-modal .modal-body > .row'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js index 4609ed73dce..2bfea85a7ce 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js @@ -7,8 +7,8 @@ module.exports = (function () { * Defines that the tab is ready when the a specific selector is visible * @return {boolean} */ - ready: function () { - return this.casper.visible(this.readySelector); + waitForReady: function () { + this.chromy.waitUntilVisible(this.readySelector); } }); })(); From 1054b5dd07b2ebbbb1cb345d6d0efe2d118ea1f9 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 14:24:58 +0100 Subject: [PATCH 028/251] PCHR-3221: Add chromy scripts for documents tab --- .../chromy/contact-summary/documents/show.js | 7 +++++++ .../page-objects/contact-summary.js | 16 +++++----------- .../backstop_data/page-objects/tabs/documents.js | 16 +++++++++------- 3 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js new file mode 100644 index 00000000000..319850cdc18 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('documents'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index 4edc175bd36..8feafca270c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -33,18 +33,12 @@ module.exports = (function () { * @return {object} resolves with the tab page object */ openTab: function (tabId) { - var casper = this.casper; - var tab = require('./tabs/' + tabId).init(casper, false); - return new Promise(function (resolve) { - casper.then(function () { - casper.click('[title="' + tab.tabTitle + '"]'); - casper.waitFor(tab.ready.bind(tab), function () { - casper.wait(500); - resolve(tab); - }); - }); - }); + var tab = require('./tabs/' + tabId); + this.chromy.click('[title="' + tab.tabTitle + '"]'); + + resolve(tab.init(this.chromy, false)); + }.bind(this)); }, /** diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js index 8c219acffdf..6f1b3681353 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js @@ -4,19 +4,21 @@ module.exports = (function () { return tab.extend({ tabTitle: 'Documents', /** - * Overrides the original tab's `ready` method + * Overrides the original tab's `waitForReady` method * There is no single selector that can be used as `readySelector` (which - * would be used by the original `ready` method) to detect when the + * would be used by the original `waitForReady` method) to detect when the * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it * * @return {Boolean} returns `true` for the `casper.waitFor()` caller */ - ready: function () { - var casper = this.casper; - - casper.waitUntilVisible('form[name="formDocuments"]'); - casper.waitWhileVisible('.ct-spinner-cover'); + waitForReady: function () { + this.chromy.waitUntilVisible('form[name="formDocuments"]'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.ct-spinner-cover'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); return true; } From b3a68617de99ec7719db55f8780632ec3d4eac8b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 15:19:08 +0100 Subject: [PATCH 029/251] PCHR-3221: Add chromy scripts for job contract tab --- .../job-contract/change-terms.js | 13 +++++ .../job-contract/correct-error.js | 13 +++++ .../job-contract/delete-dialog.js | 10 ++++ .../job-contract/full-history.js | 10 ++++ .../contact-summary/job-contract/summary.js | 7 +++ .../job-contract/tab-funding.js | 13 +++++ .../job-contract/tab-general.js | 13 +++++ .../contact-summary/job-contract/tab-hours.js | 13 +++++ .../job-contract/tab-insurance.js | 13 +++++ .../contact-summary/job-contract/tab-leave.js | 13 +++++ .../contact-summary/job-contract/tab-pay.js | 13 +++++ .../job-contract/tab-pension.js | 13 +++++ .../page-objects/modals/job-contract.js | 12 ++-- .../page-objects/tabs/job-contract.js | 55 +++++++------------ 14 files changed, 171 insertions(+), 40 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js new file mode 100644 index 00000000000..58eb3e0ae89 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openContractModal('revision'); + }) + .then(function (modal) { + modal.selectTab('General'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js new file mode 100644 index 00000000000..f68b64137bc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openContractModal('correct'); + }) + .then(function (modal) { + modal.selectTab('General'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js new file mode 100644 index 00000000000..6b5fd1962ab --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + tab.attemptDelete(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js new file mode 100644 index 00000000000..def729b25f0 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + tab.showFullHistory(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js new file mode 100644 index 00000000000..ec15ff31d23 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js new file mode 100644 index 00000000000..db27357a4fc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('Funding'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js new file mode 100644 index 00000000000..da8529d08bc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('General'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js new file mode 100644 index 00000000000..09a937fdc25 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('Hours'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js new file mode 100644 index 00000000000..6466054dfdd --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('Insurance'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js new file mode 100644 index 00000000000..8d5293ba8ec --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('Leave'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js new file mode 100644 index 00000000000..af2c04ef00f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('Pay'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js new file mode 100644 index 00000000000..308a9ae8bd7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js @@ -0,0 +1,13 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-contract') + .then(function (tab) { + return tab.openNewContractModal(); + }) + .then(function (modal) { + modal.selectTab('Pension'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js index ab47df24428..2747df16ca2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js @@ -1,3 +1,5 @@ +/* global XPathResult */ + var modal = require('./modal'); module.exports = (function () { @@ -9,11 +11,13 @@ module.exports = (function () { * @param {string} tabTitle */ selectTab: function (tabTitle) { - var casper = this.casper; + this.chromy.evaluate(function (tabTitle) { + // = clickLabel + var xPath = './/a[text()="' + tabTitle + '"]'; + var link = document.evaluate(xPath, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - casper.then(function () { - casper.clickLabel(tabTitle, 'a'); - }); + link.click(); + }, [tabTitle]); } }); })(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js index b43922c17a9..7a5a3852962 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js @@ -11,12 +11,8 @@ module.exports = (function () { * @return {object} */ attemptDelete: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); - this.waitForModal(); - }.bind(this)); + this.chromy.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); + this.waitForModal(); }, /** @@ -26,16 +22,11 @@ module.exports = (function () { * @return {Promise} resolves with the job contract modal object */ openContractModal: function (mode) { - var casper = this.casper; - var param; - - param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); + var param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); return new Promise(function (resolve) { - casper.then(function () { - casper.click('[ng-click="modalContract(\'' + param + '\')"]'); - resolve(this.waitForModal('job-contract')); - }.bind(this)); + this.chromy.click('[ng-click="modalContract(\'' + param + '\')"]'); + resolve(this.waitForModal('job-contract')); }.bind(this)); }, @@ -45,32 +36,28 @@ module.exports = (function () { * @return {Promise} resolves with the job contract modal object */ openNewContractModal: function () { - var casper = this.casper; - return new Promise(function (resolve) { - casper.then(function () { - casper.click('.hrjc-btn-add-contract > .btn-primary'); - resolve(this.waitForModal('job-contract')); - }.bind(this)); + this.chromy.click('.hrjc-btn-add-contract > .btn-primary'); + resolve(this.waitForModal('job-contract')); }.bind(this)); }, /** - * Overrides the original tab's `ready` method + * Overrides the original tab's `waitForReady` method * There is no single selector that can be used as `readySelector` (which - * would be used by the original `ready` method) to detect when the + * would be used by the original `waitForReady` method) to detect when the * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it - * - * @return {Boolean} returns `true` for the `casper.waitFor()` caller */ - ready: function () { - var casper = this.casper; - - casper.waitUntilVisible('.hrjc-summary'); - casper.waitWhileVisible('.spinner'); + waitForReady: function () { + this.chromy.waitUntilVisible('.hrjc-summary'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.hrjc-list-contract .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); - return casper.wait(200); + this.chromy.wait(500); }, /** @@ -79,12 +66,8 @@ module.exports = (function () { * @return {object} */ showFullHistory: function () { - var casper = this.casper; - - casper.then(function () { - casper.clickLabel('Full History'); - casper.waitForSelector('.hrjc-context-menu-toggle'); - }); + this.chromy.click('[heading="Full History"] > a'); + this.chromy.wait('.hrjc-context-menu-toggle'); } }); })(); From b193464c0eb14025ba081643850afe387ebf6f15 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 15:42:28 +0100 Subject: [PATCH 030/251] PCHR-3221: Add chromy scripts for job roles tab --- .../contact-summary/job-roles/add-new.js | 10 ++++ .../job-roles/basic-details-edit.js | 10 ++++ .../job-roles/basic-details.js | 7 +++ .../job-roles/cost-centres-edit.js | 10 ++++ .../contact-summary/job-roles/cost-centres.js | 10 ++++ .../job-roles/delete-dialog.js | 10 ++++ .../contact-summary/job-roles/funding-edit.js | 10 ++++ .../contact-summary/job-roles/funding.js | 10 ++++ .../job-roles/open-ui-select.js | 10 ++++ .../page-objects/tabs/job-roles.js | 48 ++++++------------- 10 files changed, 101 insertions(+), 34 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js new file mode 100644 index 00000000000..3dcdd6d253b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.showAddNew(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js new file mode 100644 index 00000000000..35c3f9dff48 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Basic Details').edit(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js new file mode 100644 index 00000000000..e5f08a84d5c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js new file mode 100644 index 00000000000..cbe1344b4d8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Cost Centres').edit(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js new file mode 100644 index 00000000000..7ef9f56e6a3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Cost Centres'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js new file mode 100644 index 00000000000..e757bcc203e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.attemptDelete(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js new file mode 100644 index 00000000000..b866c5c8358 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Funding').edit(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js new file mode 100644 index 00000000000..9f2b7aa345b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Funding'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js new file mode 100644 index 00000000000..e10ff11f5c5 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (chromy) { + page.init(chromy).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Basic Details').edit().openDropdown('department'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js index b82705835e0..b7019df104f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js @@ -9,26 +9,18 @@ module.exports = (function () { * Clicks on the delete button */ attemptDelete: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.job-role [ng-click*="removeRole"]'); - this.waitForModal(); - }.bind(this)); + this.chromy.click('.job-role [ng-click*="removeRole"]'); + this.waitForModal(); }, /** * Clicks on the edit button of a job role * - * @return {object} + * @return {Object} */ edit: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.tab-pane.active .job-role__actions .btn-link[ng-click$="show()"]'); - casper.wait(100); - }); + this.chromy.click('.tab-pane.active .job-role__actions .btn-link[ng-click$="show()"]'); + this.chromy.wait(100); return this; }, @@ -36,18 +28,14 @@ module.exports = (function () { /** * Opens the ui-select with the given name * - * @param {string} name - * @return {object} + * @param {String} name + * @return {Object} */ openDropdown: function (name) { - var casper = this.casper; - - casper.then(function () { - var common = 'jobroles.edit_data[job_roles_data.id]'; + var common = 'jobroles.editData[job_roles_data.id]'; - casper.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); - casper.wait(100); - }); + this.chromy.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); + this.chromy.wait(100); return this; }, @@ -56,25 +44,17 @@ module.exports = (function () { * Show the form for adding a new job role */ showAddNew: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); - }); + this.chromy.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); }, /** * Changes active tab * - * @param {string} tabName - * @return {object} + * @param {String} tabName + * @return {Object} */ switchToTab: function (tabName) { - var casper = this.casper; - - casper.then(function () { - casper.clickLabel(tabName); - }); + this.chromy.click('[heading="' + tabName + '"] > a'); return this; } From 8ea9a2b8527f3df63d8601426200377d630c7549 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 15:42:43 +0100 Subject: [PATCH 031/251] PCHR-3221: Add chromy scripts for tasks tab --- .../engine_scripts/chromy/contact-summary/tasks/show.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js new file mode 100644 index 00000000000..8e665517240 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../../page-objects/contact-summary'); + +module.exports = function (casper) { + page.init(casper).openTab('tasks'); +}; From 4f5e4235573e5311a713ea977bea8071a0f2df4e Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 16 Mar 2018 15:46:56 +0100 Subject: [PATCH 032/251] PCHR-3221: Remove remaining casperjs references --- .../chromy/contact-summary/tasks/show.js | 4 +-- .../staff/my-report-show-absence-in-hours.js | 4 +-- .../backstop_data/page-objects/documents.js | 26 +++++-------------- .../page-objects/tabs/documents.js | 4 --- 4 files changed, 10 insertions(+), 28 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js index 8e665517240..1dd1c49026d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js @@ -2,6 +2,6 @@ var page = require('../../../../page-objects/contact-summary'); -module.exports = function (casper) { - page.init(casper).openTab('tasks'); +module.exports = function (chromy) { + page.init(chromy).openTab('tasks'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js index 1a8b3048be6..8f2948576dc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js @@ -3,8 +3,8 @@ var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have the absence type in *hours* with a label "Holiday in Hours" -module.exports = function (casper) { - page.init(casper) +module.exports = function (chromy) { + page.init(chromy) .newRequest('leave') .selectRequestAbsenceType('Holiday in Hours'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js index b361857dea3..2309ec18a38 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js @@ -36,11 +36,7 @@ module.exports = (function () { * @return {object} */ documentActions: function () { - var casper = this.casper; - - casper.then(function () { - casper.click(documentSelector + ' .ct-context-menu-toggle'); - }); + this.chromy.click(documentSelector + ' .ct-context-menu-toggle'); return this; }, @@ -51,17 +47,11 @@ module.exports = (function () { * @return {Promise} resolves with the document modal page object */ openDocument: function () { - var casper = this.casper; - return new Promise(function (resolve) { - casper.then(function () { - this.documentActions(); - }.bind(this)); + this.documentActions(); - casper.then(function () { - casper.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); - resolve(this.waitForModal('document')); - }.bind(this)); + this.chromy.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); + resolve(this.waitForModal('document')); }.bind(this)); }, @@ -69,12 +59,8 @@ module.exports = (function () { * Shows the "select dates" filter */ selectDates: function () { - var casper = this.casper; - - casper.then(function () { - casper.click('.ct-select-dates'); - casper.wait(500); - }); + this.chromy.click('.ct-select-dates'); + this.chromy.wait(500); }, /** diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js index 6f1b3681353..8d480b2be87 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js @@ -9,8 +9,6 @@ module.exports = (function () { * would be used by the original `waitForReady` method) to detect when the * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it - * - * @return {Boolean} returns `true` for the `casper.waitFor()` caller */ waitForReady: function () { this.chromy.waitUntilVisible('form[name="formDocuments"]'); @@ -19,8 +17,6 @@ module.exports = (function () { var dom = document.querySelector('.ct-spinner-cover'); return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); - - return true; } }); })(); From de248990ce413d90ac528996ba14b64d15a42228 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 19 Mar 2018 14:25:26 +0100 Subject: [PATCH 033/251] PCHR-3221: Remove static config file --- .../backstop_data/backstop.json | 161 ------------------ 1 file changed, 161 deletions(-) delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json deleted file mode 100644 index 4be6e77a1b8..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "id": "CiviHR", - "viewports": [{ - "label": "desktop", - "width": 1920, - "height": 900 - }], - "onBeforeScript": "chromy/onBefore.js", - "onReadyScript": "chromy/onReady.js", - "scenarios": [ - { - "label": "Contact Summary", - "url": "http://localhost:8017/index.php?q=civicrm/contact/view&reset=1&cid=4", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Absence Periods list", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/periods?action=browse", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Absence Periods form", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/periods?action=add", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Absence Types list", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/types?action=browse", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Absence Types form", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/types?action=add", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "General Settings", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/general_settings", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Leave & Absences Import - Step 1", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/import", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Public Holidays list", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/public_holidays?action=browse", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Public Holidays form", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/public_holidays?action=add", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Work Patterns list", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/work_patterns?action=browse", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Work Pattern description form", - "url": "http://localhost:8017/civicrm/admin/leaveandabsences/work_patterns?action=add", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Features", - "url": "http://localhost:8017/features-in-civihr", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Customize Onboarding Wizard", - "url": "http://localhost:8017/customize-onboarding-wizard", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Password Page", - "url": "http://localhost:8017/user/1/edit", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "Personal Details Page", - "url": "http://localhost:8017/onboarding-form", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Dashboard", - "url": "http://localhost:8017/dashboard", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - HR Resources", - "url": "http://localhost:8017/hr-resources", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - HR Vacancies", - "url": "http://localhost:8017/hr-vacancies", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - My Details", - "url": "http://localhost:8017/hr-details", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Reports", - "url": "http://localhost:8017/reports", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Reports people", - "url": "http://localhost:8017/reports/people/", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Reports - Leave and Absence", - "url": "http://localhost:8017/reports/leave_and_absence/", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Reports - Age groups", - "url": "http://localhost:8017/reports/settings/age_group/", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Staff Directory", - "url": "http://localhost:8017/staff-directory", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "SSP - Tasks", - "url": "http://localhost:8017/tasks-and-documents", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "T&A / Calendar", - "url": "http://localhost:8017/civicrm/tasksassignments/dashboard#/calendar", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - }, - { - "label": "T&A / Documents", - "url": "http://localhost:8017/civicrm/tasksassignments/dashboard#/documents", - "cookiePath": "backstop_data/engine_scripts/cookies.json" - } - ], - "paths": { - "bitmaps_reference": "backstop_data/bitmaps_reference", - "bitmaps_test": "backstop_data/bitmaps_test", - "engine_scripts": "backstop_data/engine_scripts", - "html_report": "backstop_data/html_report", - "ci_report": "backstop_data/ci_report" - }, - "report": ["browser"], - "engine": "chrome", - "engineFlags": [], - "asyncCaptureLimit": 5, - "asyncCompareLimit": 50, - "debug": false, - "debugWindow": false -} From f59ab3d3e56608a46e7017eb912767f692a9ea23 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 19 Mar 2018 15:04:45 +0100 Subject: [PATCH 034/251] PCHR-3221: Remove casperjs scripts --- .../casper_scripts/close-any-modal.js | 5 --- .../contact-access-rights/open-ui-select.js | 10 ----- .../contact-access-rights/show.js | 7 ---- .../contact-summary/absence/tab-calendar.js | 7 ---- .../absence/tab-entitlements.js | 7 ---- .../absence/tab-report-actions.js | 10 ----- .../absence/tab-report-open-section.js | 10 ----- .../contact-summary/absence/tab-report.js | 7 ---- .../absence/tab-work-patterns-modal.js | 10 ----- .../absence/tab-work-patterns.js | 7 ---- .../contact-summary/documents/show.js | 7 ---- .../job-contract/change-terms.js | 13 ------ .../job-contract/correct-error.js | 13 ------ .../job-contract/delete-dialog.js | 10 ----- .../job-contract/full-history.js | 10 ----- .../contact-summary/job-contract/summary.js | 7 ---- .../job-contract/tab-funding.js | 13 ------ .../job-contract/tab-general.js | 13 ------ .../contact-summary/job-contract/tab-hours.js | 13 ------ .../job-contract/tab-insurance.js | 13 ------ .../contact-summary/job-contract/tab-leave.js | 13 ------ .../contact-summary/job-contract/tab-pay.js | 13 ------ .../job-contract/tab-pension.js | 13 ------ .../contact-summary/job-roles/add-new.js | 10 ----- .../job-roles/basic-details-edit.js | 10 ----- .../job-roles/basic-details.js | 7 ---- .../job-roles/cost-centres-edit.js | 10 ----- .../contact-summary/job-roles/cost-centres.js | 10 ----- .../job-roles/delete-dialog.js | 10 ----- .../contact-summary/job-roles/funding-edit.js | 10 ----- .../contact-summary/job-roles/funding.js | 10 ----- .../job-roles/open-ui-select.js | 10 ----- .../contact-summary/show-actions.js | 7 ---- .../contact-summary/tasks/show.js | 7 ---- .../casper_scripts/contact/contact-edit.js | 7 ---- .../documents/advanced-filters.js | 7 ---- .../documents/document/actions.js | 7 ---- .../casper_scripts/documents/document/add.js | 7 ---- .../casper_scripts/documents/document/open.js | 7 ---- .../documents/document/pick-due-date.js | 9 ---- .../documents/document/select-assignee.js | 9 ---- .../documents/document/select-type.js | 9 ---- .../documents/document/show-all-fields.js | 11 ----- .../casper_scripts/documents/select-dates.js | 7 ---- .../backstop_data/casper_scripts/init.js | 41 ------------------- .../leave-absence-dashboard/import/step-2.js | 7 ---- .../leave-absence-dashboard/import/step-3.js | 7 ---- .../leave-absence-dashboard/import/step-4.js | 7 ---- .../leave-balances/leave-balance-report.js | 7 ---- .../leave-balances/leave-balances.js | 7 ---- .../leave-calendar/leave-calendar.js | 7 ---- .../leave-requests-with-filters.js | 10 ----- .../leave-requests/leave-requests.js | 7 ---- .../onboarding-wizard/address.js | 7 ---- .../onboarding-wizard/contact.js | 7 ---- .../onboarding-wizard/dependents.js | 7 ---- .../onboarding-wizard/emergency_contact.js | 7 ---- .../onboarding-wizard/payroll.js | 7 ---- .../onboarding-wizard/profile_picture.js | 7 ---- .../manager-leave-requests-all-requests.js | 9 ---- .../admin/manager-leave-requests.js | 9 ---- .../manager/leave-balances.js | 7 ---- .../leave-requests-of-staff-edit-sickness.js | 11 ----- .../leave-requests-of-staff-edit-toil.js | 11 ----- .../leave-requests-on-behalf-of-staff.js | 8 ---- .../manager/leave-requests-show-actions.js | 8 ---- .../manager/leave-requests-with-filters.js | 8 ---- .../manager/leave-requests-without-filters.js | 8 ---- .../manager-leave-calendar_all-contacts.js | 7 ---- ...er-leave-calendar_current-month-visible.js | 7 ---- .../manager-leave-calendar_legend-expanded.js | 7 ---- .../sick-requests-on-behalf-of-staff.js | 8 ---- .../toil-requests-on-behalf-of-staff.js | 8 ---- ...my-leave-calendar_current-month-visible.js | 7 ---- .../staff/my-leave-calendar_tooltip.js | 11 ----- ...st-modal-show-deduction-fields-expanded.js | 16 -------- ...ave-request-modal-show-deduction-fields.js | 14 ------- .../staff/my-report-pending-show-comments.js | 13 ------ .../staff/my-report-show-absence-in-hours.js | 10 ----- .../ssp-leave-absences/staff/my-report.js | 8 ---- .../casper_scripts/ssp/edit-my-details.js | 7 ---- .../ssp/hr-resources-see-resources.js | 7 ---- .../ssp/tasks-create-new-task.js | 7 ---- .../ssp/tasks-show-completed-tasks.js | 7 ---- .../ssp/vacancies-more-details.js | 7 ---- .../casper_scripts/tasks/advanced-filters.js | 7 ---- .../tasks/assignment/add-document.js | 9 ---- .../tasks/assignment/add-task.js | 9 ---- .../casper_scripts/tasks/assignment/add.js | 7 ---- .../tasks/assignment/pick-date.js | 9 ---- .../tasks/assignment/select-type.js | 9 ---- .../casper_scripts/tasks/select-dates.js | 7 ---- .../casper_scripts/tasks/task/actions.js | 7 ---- .../casper_scripts/tasks/task/add.js | 7 ---- .../tasks/task/editable-assigned.js | 7 ---- .../tasks/task/editable-date.js | 7 ---- .../tasks/task/editable-subject.js | 7 ---- .../tasks/task/editable-target.js | 7 ---- .../casper_scripts/tasks/task/open.js | 7 ---- .../casper_scripts/tasks/task/pick-date.js | 9 ---- .../tasks/task/select-assignee.js | 9 ---- .../casper_scripts/tasks/task/select-type.js | 9 ---- .../tasks/task/show-all-fields.js | 13 ------ .../casper_scripts/tasks/task/show-more.js | 7 ---- .../casper_scripts/tasks/task/task.js | 7 ---- .../work-patterns/show-calendar-form.js | 7 ---- 106 files changed, 951 deletions(-) delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/close-any-modal.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/open-ui-select.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/show.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-calendar.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-entitlements.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-open-section.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns-modal.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/documents/show.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/change-terms.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/correct-error.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/delete-dialog.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/full-history.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/summary.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-funding.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-general.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-hours.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-insurance.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-leave.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pay.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pension.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/add-new.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/delete-dialog.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/open-ui-select.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/show-actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/tasks/show.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact/contact-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/advanced-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/add.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/open.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/pick-due-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-assignee.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-type.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/show-all-fields.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/select-dates.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/init.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-2.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-3.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-4.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balance-report.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balances.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/address.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/contact.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/dependents.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/emergency_contact.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/payroll.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/profile_picture.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-balances.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/edit-my-details.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/hr-resources-see-resources.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-create-new-task.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-show-completed-tasks.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/vacancies-more-details.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/advanced-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-document.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-task.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/pick-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/select-type.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/select-dates.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/add.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-assigned.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-subject.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-target.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/open.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/pick-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-assignee.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-type.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-all-fields.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-more.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/task.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/work-patterns/show-calendar-form.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/close-any-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/close-any-modal.js deleted file mode 100644 index f4dcb6cc92f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/close-any-modal.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = function (casper) { - require('../page-objects/page').init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/open-ui-select.js deleted file mode 100644 index b10a13e64bd..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/open-ui-select.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openManageRightsModal() - .then(function (modal) { - modal.openDropdown('locations'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/show.js deleted file mode 100644 index 08068e17ff3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-access-rights/show.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openManageRightsModal(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-calendar.js deleted file mode 100644 index c94b0d758b3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-calendar.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('calendar'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-entitlements.js deleted file mode 100644 index aeebc60fe8e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-entitlements.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('entitlements'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-actions.js deleted file mode 100644 index 56e795a9e63..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-actions.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('report') - .then(function (reportTab) { - reportTab.openSection('pending').showActions(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-open-section.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-open-section.js deleted file mode 100644 index 6a0a86ddb8d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report-open-section.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('report') - .then(function (reportTab) { - reportTab.openSection('pending'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report.js deleted file mode 100644 index b7f1bf920aa..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-report.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('report'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns-modal.js deleted file mode 100644 index 3cc62712c70..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns-modal.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('work-patterns') - .then(function (workPatternsTab) { - workPatternsTab.showModal(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns.js deleted file mode 100644 index 79770b9dbfb..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/absence/tab-work-patterns.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../page-objects/tabs/absence'); - -module.exports = function (casper) { - absenceTab.init(casper).openSubTab('work-patterns'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/documents/show.js deleted file mode 100644 index e4fbc14585d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/documents/show.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('documents'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/change-terms.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/change-terms.js deleted file mode 100644 index 37e2f55a9fb..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/change-terms.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openContractModal('revision'); - }) - .then(function (modal) { - modal.selectTab('General'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/correct-error.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/correct-error.js deleted file mode 100644 index 275affede8b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/correct-error.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openContractModal('correct'); - }) - .then(function (modal) { - modal.selectTab('General'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/delete-dialog.js deleted file mode 100644 index c9cd074c63c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/delete-dialog.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - tab.attemptDelete(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/full-history.js deleted file mode 100644 index ae45580702c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/full-history.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - tab.showFullHistory(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/summary.js deleted file mode 100644 index 99e1b3ff7ae..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/summary.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-funding.js deleted file mode 100644 index 2d0c2158552..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-funding.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Funding'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-general.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-general.js deleted file mode 100644 index e6ebbbb6b26..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-general.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('General'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-hours.js deleted file mode 100644 index 64662b7f6f5..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-hours.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Hours'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-insurance.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-insurance.js deleted file mode 100644 index 809f426a113..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-insurance.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Insurance'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-leave.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-leave.js deleted file mode 100644 index da9fe4b28ef..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-leave.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Leave'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pay.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pay.js deleted file mode 100644 index 1960a055032..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pay.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Pay'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pension.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pension.js deleted file mode 100644 index accb488fafc..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-contract/tab-pension.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Pension'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/add-new.js deleted file mode 100644 index 7bbd50ead4c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/add-new.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.showAddNew(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details-edit.js deleted file mode 100644 index fabaa251e5b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details-edit.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details.js deleted file mode 100644 index a6439796c26..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/basic-details.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres-edit.js deleted file mode 100644 index 0823895dd45..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres-edit.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres').edit(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres.js deleted file mode 100644 index 044cc31bf58..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/cost-centres.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/delete-dialog.js deleted file mode 100644 index bafa8fd4d12..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/delete-dialog.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.attemptDelete(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding-edit.js deleted file mode 100644 index 04f55c78198..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding-edit.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding').edit(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding.js deleted file mode 100644 index 8d3c9a2176a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/funding.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/open-ui-select.js deleted file mode 100644 index bd409c7e48f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/job-roles/open-ui-select.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit().openDropdown('department'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/show-actions.js deleted file mode 100644 index df358d5dad2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/show-actions.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).showActions(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/tasks/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/tasks/show.js deleted file mode 100644 index 2d98d83ab9a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact-summary/tasks/show.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (casper) { - page.init(casper).openTab('tasks'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact/contact-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact/contact-edit.js deleted file mode 100644 index b4326c0386b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/contact/contact-edit.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/contact-edit-form'); - -module.exports = function (casper) { - page.init(casper).editForm(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/advanced-filters.js deleted file mode 100644 index 68bf2a94ff0..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/advanced-filters.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).advancedFilters(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/actions.js deleted file mode 100644 index 985bd0b823b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/actions.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).documentActions(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/add.js deleted file mode 100644 index 3e950b84f6f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/add.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).addDocument(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/open.js deleted file mode 100644 index 881dea205dc..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/open.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).openDocument(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/pick-due-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/pick-due-date.js deleted file mode 100644 index 7a0e3dff8a1..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/pick-due-date.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).addDocument().then(function (modal) { - modal.showTab("Assignments").pickDueDate(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-assignee.js deleted file mode 100644 index 0e87528d31b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-assignee.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).addDocument().then(function (modal) { - modal.showTab('Assignments').showField('Assignee').selectAssignee(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-type.js deleted file mode 100644 index 0c787828d8a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/select-type.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).addDocument().then(function (modal) { - modal.selectType(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/show-all-fields.js deleted file mode 100644 index 1da26bb7632..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/document/show-all-fields.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).addDocument().then(function (modal) { - modal - .showField('Assignee') - .showField('Assignment'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/select-dates.js deleted file mode 100644 index a5487835d42..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/documents/select-dates.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/documents'); - -module.exports = function (casper) { - page.init(casper).selectDates(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/init.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/init.js deleted file mode 100644 index 0e2b5245549..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/init.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; -var config = require('../site-config'); - -module.exports = function (casper, scenario) { - var loginFormSelector = 'form#user-login-form'; - var credentials = config.credentials[scenario.credential]; - - casper.echo('--------------------------------------------', 'COMMENT'); - casper.echo('Running Scenario "' + scenario.label + '" ' + scenario.count, 'PARAMETER'); - - if (!scenario.performLogin) { - return; - } - - casper - .then(function () { - if (scenario.performLogout) { - casper.echo('Current scenario has different login credentials from previous, logging out is necessary', 'INFO'); - casper.echo('Logging Out', 'INFO'); - - return phantom.clearCookies(); - } - }) - .then(function () { - casper.echo('Logging in with "' + (scenario.credential || 'admin') + '" credentials before starting ...', 'INFO'); - }) - .thenOpen(config.url + '/welcome-page', function () { - casper.then(function () { - casper.waitForSelector(loginFormSelector, function () { - casper.waitWhileSelector(loginFormSelector, function () { - casper.echo('Logged in', 'INFO'); - }, function () { - casper.echo('Login form visible and timeout reached!', 'RED_BAR'); - }, 5000); - casper.fill(loginFormSelector, credentials, true); - }, function () { - casper.echo('Login form not found!', 'RED_BAR'); - }, 8000); - }); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-2.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-2.js deleted file mode 100644 index 05ab9192703..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-2.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-import'); - -module.exports = function (casper) { - page.init(casper).showStep2(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-3.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-3.js deleted file mode 100644 index e68d1993588..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-3.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-import'); - -module.exports = function (casper) { - page.init(casper).showStep3(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-4.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-4.js deleted file mode 100644 index 07e8f3e4580..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/import/step-4.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-import'); - -module.exports = function (casper) { - page.init(casper).showStep4(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balance-report.js deleted file mode 100644 index 42db82a19f6..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balance-report.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-dashboard'); - -module.exports = function (casper) { - page.init(casper).openTab('leave-balances'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balances.js deleted file mode 100644 index 42db82a19f6..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-balances/leave-balances.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-dashboard'); - -module.exports = function (casper) { - page.init(casper).openTab('leave-balances'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js deleted file mode 100644 index d4649c6bec7..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-dashboard'); - -module.exports = function (casper) { - page.init(casper).openTab('leave-calendar'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js deleted file mode 100644 index bcc5a2dc83b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-dashboard'); - -module.exports = function (casper) { - page.init(casper).openTab('leave-requests') - .then(function (requestTab) { - requestTab.showFilters(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests.js deleted file mode 100644 index 4fc31006121..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/leave-absence-dashboard/leave-requests/leave-requests.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/leave-absence-dashboard'); - -module.exports = function (casper) { - page.init(casper).openTab('leave-requests'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/address.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/address.js deleted file mode 100644 index 0ca56dfc9f6..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/address.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/onboarding-wizard'); - -module.exports = function (casper) { - page.init(casper).reachAddressPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/contact.js deleted file mode 100644 index 6538bf589d4..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/contact.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/onboarding-wizard'); - -module.exports = function (casper) { - page.init(casper).reachContactInfoPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/dependents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/dependents.js deleted file mode 100644 index 150d1648f43..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/dependents.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/onboarding-wizard'); - -module.exports = function (casper) { - page.init(casper).reachDependentPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/emergency_contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/emergency_contact.js deleted file mode 100644 index 1b4ab1d0728..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/emergency_contact.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/onboarding-wizard'); - -module.exports = function (casper) { - page.init(casper).reachEmergencyContactPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/payroll.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/payroll.js deleted file mode 100644 index e59fcdeec8c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/payroll.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/onboarding-wizard'); - -module.exports = function (casper) { - page.init(casper).reachPayrollPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/profile_picture.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/profile_picture.js deleted file mode 100644 index eb5f527fa99..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/onboarding-wizard/profile_picture.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/onboarding-wizard'); - -module.exports = function (casper) { - page.init(casper).reachProfilePicturePage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js deleted file mode 100644 index b5f883e03ca..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of Admin -// and have at least one leave request *assigned* to the Admin -module.exports = function (casper) { - page.init(casper).changeFilterByAssignee('all'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests.js deleted file mode 100644 index 3d67c46b6cf..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/admin/manager-leave-requests.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of Admin -// and have at least one leave request *assigned* to the Admin -module.exports = function (casper) { - page.init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-balances.js deleted file mode 100644 index 712648e4a71..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-balances.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); - -module.exports = function (casper) { - page.init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js deleted file mode 100644 index 5fbbf4a62f3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one sickness request -module.exports = function (casper) { - page.init(casper) - .openLeaveTypeFor(3) - .openActionsForRow(1) - .editRequest(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js deleted file mode 100644 index 06d6788cacf..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one toil request -module.exports = function (casper) { - page.init(casper) - .openLeaveTypeFor(2) - .openActionsForRow(1) - .editRequest(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js deleted file mode 100644 index a21392cab9c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager -module.exports = function (casper) { - page.init(casper).applyLeaveForStaff('leave'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js deleted file mode 100644 index 39f70b61e21..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one leave request -module.exports = function (casper) { - page.init(casper).openActionsForRow(1); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js deleted file mode 100644 index 81e4caaec94..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one leave request -module.exports = function (casper) { - page.init(casper).expandFilter(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js deleted file mode 100644 index f22fd8604be..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one leave request -module.exports = function (casper) { - page.init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js deleted file mode 100644 index 93181718743..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); - -module.exports = function (casper) { - page.init(casper).toggleContactsWithLeaves(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js deleted file mode 100644 index abfca4dcf67..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); - -module.exports = function (casper) { - page.init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js deleted file mode 100644 index 33067de1991..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); - -module.exports = function (casper) { - page.init(casper).toggleLegend(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js deleted file mode 100644 index b2644cbb0ef..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager -module.exports = function (casper) { - page.init(casper).applyLeaveForStaff('sickness'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js deleted file mode 100644 index 8e97491973c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager -module.exports = function (casper) { - page.init(casper).applyLeaveForStaff('toil'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js deleted file mode 100644 index 89b9486055a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); - -module.exports = function (casper) { - page.init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js deleted file mode 100644 index 630a867911e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); - -module.exports = function (casper) { - page.init(casper) - .clearCurrentlySelectedMonth() - .showMonth('February') - .showYear(2016) - .showTooltip(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js deleted file mode 100644 index 7908e0dcb07..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); - -// precondition: need to have a current absence period -module.exports = function (casper) { - page.init(casper) - .newRequest('leave') - .selectRequestAbsenceType('Holiday in Hours') - .changeRequestDaysMode('multiple') - .selectRequestDate('from', 2, 1) - .selectRequestDate('to', 2, 2) - .waitUntilRequestBalanceIsCalculated() - .expandDeductionField('from') - .expandDeductionField('to'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js deleted file mode 100644 index 9bafcdb52d1..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); - -// precondition: need to have a current absence period -module.exports = function (casper) { - page.init(casper) - .newRequest('leave') - .selectRequestAbsenceType('Holiday in Hours') - .changeRequestDaysMode('multiple') - .selectRequestDate('from', 2, 1) - .selectRequestDate('to', 2, 2) - .waitUntilRequestBalanceIsCalculated(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js deleted file mode 100644 index 06c01acce41..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); - -// precondition: need to have the first leave request on the pending list with at least a comment -module.exports = function (casper) { - var myReport = page.init(casper) - .openSection('pending') - .openActionsForRow() - .editRequest().then(function (modal) { - modal.selectTab('Comments'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js deleted file mode 100644 index a795ac9959a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); - -// precondition: need to have the absence type in *hours* with a label "Holiday in Hours" -module.exports = function (casper) { - var myReport = page.init(casper) - .newRequest('leave') - .selectRequestAbsenceType('Holiday in Hours'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report.js deleted file mode 100644 index 4a0a164a947..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp-leave-absences/staff/my-report.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); - -// precondition: need to have at least one pending leave request -module.exports = function (casper) { - page.init(casper).openSection('pending'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/edit-my-details.js deleted file mode 100644 index b2850c2d171..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/edit-my-details.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/ssp/my-details'); - -module.exports = function (casper) { - page.init(casper).showEditMyDetailsPopup(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/hr-resources-see-resources.js deleted file mode 100644 index 7a220de322f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/hr-resources-see-resources.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/ssp/hr-resources'); - -module.exports = function (casper) { - page.init(casper).seeResources(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-create-new-task.js deleted file mode 100644 index 53ee99cd860..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-create-new-task.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/ssp/tasks'); - -module.exports = function (casper) { - page.init(casper).openCreateNewTaskModal(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-show-completed-tasks.js deleted file mode 100644 index 011d33b07c2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/tasks-show-completed-tasks.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/ssp/tasks'); - -module.exports = function (casper) { - page.init(casper).openCompletedTasksModal(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/vacancies-more-details.js deleted file mode 100644 index 5f8e261cb81..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/ssp/vacancies-more-details.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/ssp/vacancies'); - -module.exports = function (casper) { - page.init(casper).showMoreDetails(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/advanced-filters.js deleted file mode 100644 index c252a73102b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/advanced-filters.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).advancedFilters(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-document.js deleted file mode 100644 index 23d3e12fa7c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-document.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addAssignment().then(function (modal) { - modal.selectType().addDocument(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-task.js deleted file mode 100644 index 6b40c9ece19..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add-task.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addAssignment().then(function (modal) { - modal.selectType().addTask(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add.js deleted file mode 100644 index 664d00a0b64..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/add.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addAssignment(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/pick-date.js deleted file mode 100644 index a40491900da..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/pick-date.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addAssignment().then(function (modal) { - modal.pickDate(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/select-type.js deleted file mode 100644 index 413caab63e0..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/assignment/select-type.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addAssignment().then(function (modal) { - modal.selectType(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/select-dates.js deleted file mode 100644 index f00648488bc..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/select-dates.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).selectDates(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/actions.js deleted file mode 100644 index a469bb6529c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/actions.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).taskActions(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/add.js deleted file mode 100644 index d808cb58530..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/add.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addTask(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-assigned.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-assigned.js deleted file mode 100644 index 278e51f511f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-assigned.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).inPlaceEdit('assigned'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-date.js deleted file mode 100644 index 366c21a3c56..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-date.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).inPlaceEdit('date'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-subject.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-subject.js deleted file mode 100644 index 61e43ab4922..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-subject.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).inPlaceEdit('subject'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-target.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-target.js deleted file mode 100644 index 6cde1965d82..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/editable-target.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).inPlaceEdit('target'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/open.js deleted file mode 100644 index 0ab63e1716c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/open.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).openTask(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/pick-date.js deleted file mode 100644 index df36626586f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/pick-date.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addTask().then(function (modal) { - modal.pickDate(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-assignee.js deleted file mode 100644 index d84ae548cfc..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-assignee.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addTask().then(function (modal) { - modal.showField('Assignee').selectAssignee(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-type.js deleted file mode 100644 index 55c0768523e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/select-type.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addTask().then(function (modal) { - modal.selectType(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-all-fields.js deleted file mode 100644 index 1f0894b459b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-all-fields.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).addTask().then(function (modal) { - modal - .showField('Subject') - .showField('Assignee') - .showField('Status') - .showField('Assignment'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-more.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-more.js deleted file mode 100644 index c71b8e43c92..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/show-more.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper).showMore(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/task.js deleted file mode 100644 index 530059ac27d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/tasks/task/task.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (casper) { - page.init(casper); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/work-patterns/show-calendar-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/work-patterns/show-calendar-form.js deleted file mode 100644 index 8d021dcace2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/casper_scripts/work-patterns/show-calendar-form.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../page-objects/work-patterns-form'); - -module.exports = function (casper) { - page.init(casper).showCalendarForm(); -}; From 66d376962162591a0c0ec4ece7a4f7f9de145570 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 19 Mar 2018 16:11:15 +0100 Subject: [PATCH 035/251] PCHR-3221: Amend scenario partials --- .../scenarios/contact-access-rights.json | 10 +- .../scenarios/contact-summary.json | 9 +- .../leave-absence-admin-absence-periods.json | 6 +- .../leave-absence-admin-absence-types.json | 6 +- .../leave-absence-admin-general-settings.json | 3 +- .../scenarios/leave-absence-admin-import.json | 18 ++-- .../leave-absence-admin-public-holidays.json | 6 +- .../leave-absence-admin-work-patterns.json | 11 +- ...eave-absence-dashboard-leave-calendar.json | 5 +- ...eave-absence-dashboard-leave-requests.json | 10 +- .../scenarios/leave-balances.json | 10 +- .../scenarios/onboarding-wizard.json | 32 +++--- .../scenarios/ssp-dashboard.json | 2 +- .../scenarios/ssp-hr-resources.json | 6 +- .../scenarios/ssp-hr-vacancies.json | 6 +- .../ssp-la-manager-leave-calendar.json | 15 ++- ...sp-la-manager-leave-requests-by-admin.json | 10 +- .../ssp-la-manager-leave-requests.json | 43 ++++---- .../scenarios/ssp-la-my-leave-calendar.json | 10 +- .../ssp-la-my-report-leave-request-modal.json | 20 ++-- .../scenarios/ssp-la-my-report.json | 5 +- .../scenarios/ssp-my-details.json | 6 +- .../backstop_data/scenarios/ssp-reports.json | 8 +- .../scenarios/ssp-staff-directory.json | 2 +- .../backstop_data/scenarios/ssp-tasks.json | 13 +-- .../backstop_data/scenarios/ta-calendar.json | 4 +- .../backstop_data/scenarios/ta-documents.json | 34 +++--- .../backstop_data/scenarios/ta-tasks.json | 100 +++++++----------- .../backstop_data/scenarios/tab-absence.json | 35 +++--- .../scenarios/tab-documents.json | 5 +- .../scenarios/tab-job-contract.json | 60 +++++------ .../scenarios/tab-job-roles.json | 45 ++++---- .../backstop_data/scenarios/tab-tasks.json | 5 +- 33 files changed, 227 insertions(+), 333 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json index f5273f830a6..f752a64f9d2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json @@ -2,15 +2,13 @@ "scenarios": [ { "label": "Contact Access Rights", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:admin}}", - "onReadyScript": "contact-access-rights/show", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:admin}}", + "onReadyScript": "contact-access-rights/show.js" }, { "label": "Contact Access Rights / Open ui select", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:admin}}", - "onReadyScript": "contact-access-rights/open-ui-select", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:admin}}", + "onReadyScript": "contact-access-rights/open-ui-select.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json index 3509c8ca1b4..f7eb634db2a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json @@ -2,15 +2,12 @@ "scenarios": [ { "label": "Contact Summary", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "close-any-modal", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}" }, { "label": "Contact Summary / Actions", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/show-actions", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/show-actions.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json index 48685b2c173..5ff4bbaae43 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json @@ -2,13 +2,11 @@ "scenarios": [ { "label": "Absence Periods list", - "url": "civicrm/admin/leaveandabsences/periods?action=browse", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/periods?action=browse" }, { "label": "Absence Periods form", - "url": "civicrm/admin/leaveandabsences/periods?action=add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/periods?action=add" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json index 050b26edcf4..292fad45eda 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json @@ -2,13 +2,11 @@ "scenarios": [ { "label": "Absence Types list", - "url": "civicrm/admin/leaveandabsences/types?action=browse", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/types?action=browse" }, { "label": "Absence Types form", - "url": "civicrm/admin/leaveandabsences/types?action=add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/types?action=add" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json index 004071785ae..5ee7b145a04 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json @@ -2,8 +2,7 @@ "scenarios": [ { "label": "General Settings", - "url": "civicrm/admin/leaveandabsences/general_settings", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/general_settings" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json index ef6037e96cf..ec2129ec267 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json @@ -2,26 +2,22 @@ "scenarios": [ { "label": "Leave & Absences Import - Step 1", - "url": "civicrm/admin/leaveandabsences/import", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import" }, { "label": "Leave & Absences Import - Step 2", - "url": "civicrm/admin/leaveandabsences/import", - "onReadyScript": "leave-absence-dashboard/import/step-2", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", + "onReadyScript": "leave-absence-dashboard/import/step-2.js" }, { "label": "Leave & Absences Import - Step 3", - "url": "civicrm/admin/leaveandabsences/import", - "onReadyScript": "leave-absence-dashboard/import/step-3", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", + "onReadyScript": "leave-absence-dashboard/import/step-3.js" }, { "label": "Leave & Absences Import - Step 4", - "url": "civicrm/admin/leaveandabsences/import", - "onReadyScript": "leave-absence-dashboard/import/step-4", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", + "onReadyScript": "leave-absence-dashboard/import/step-4.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json index 4378c96acd5..f03b6a00b8d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json @@ -2,13 +2,11 @@ "scenarios": [ { "label": "Public Holidays list", - "url": "civicrm/admin/leaveandabsences/public_holidays?action=browse", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/public_holidays?action=browse" }, { "label": "Public Holidays form", - "url": "civicrm/admin/leaveandabsences/public_holidays?action=add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/public_holidays?action=add" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json index 860de584422..613a730bf7e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json @@ -2,19 +2,16 @@ "scenarios": [ { "label": "Work Patterns list", - "url": "civicrm/admin/leaveandabsences/work_patterns?action=browse", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=browse" }, { "label": "Work Pattern description form", - "url": "civicrm/admin/leaveandabsences/work_patterns?action=add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=add" }, { "label": "Work Pattern calendar form", - "url": "civicrm/admin/leaveandabsences/work_patterns?action=add", - "onReadyScript": "work-patterns/show-calendar-form", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=add", + "onReadyScript": "work-patterns/show-calendar-form.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json index cd5c1f2c464..cc89f3a541a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json @@ -2,9 +2,8 @@ "scenarios": [ { "label": "Leave Absence Dashboard Leave Calendar", - "url": "civicrm/leaveandabsences/dashboard#/calendar", - "onReadyScript": "leave-absence-dashboard/leave-calendar/leave-calendar", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/calendar", + "onReadyScript": "leave-absence-dashboard/leave-calendar/leave-calendar.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json index d6d3efcf479..832d349d1b2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json @@ -2,15 +2,13 @@ "scenarios": [ { "label": "Leave Absence Dashboard Leave Requests", - "url": "civicrm/leaveandabsences/dashboard#/requests", - "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/requests", + "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests.js" }, { "label": "Leave Absence Dashboard Leave Requests with filters", - "url": "civicrm/leaveandabsences/dashboard#/requests", - "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests-with-filters", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/requests", + "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests-with-filters.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json index 2b50cf2e336..153ba60be98 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json @@ -2,15 +2,13 @@ "scenarios": [ { "label": "SSP: Leave Balances", - "url": "manager-leave#/manager-leave/leave-balances", - "onReadyScript": "ssp-leave-absences/manager/leave-balances", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/leave-balances", + "onReadyScript": "ssp-leave-absences/manager/leave-balances.js" }, { "label": "Admin Portal: Leave Balances", - "url": "civicrm/leaveandabsences/dashboard#/leave-balances", - "onReadyScript": "leave-absence-dashboard/leave-balances/leave-balances", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/leave-balances", + "onReadyScript": "leave-absence-dashboard/leave-balances/leave-balances.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json index 70d6de53d26..7f7a5360e87 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json @@ -2,49 +2,49 @@ "scenarios": [ { "label": "Features", - "url": "features-in-civihr" + "url": "{{siteUrl}}/features-in-civihr" }, { "label": "Customize Onboarding Wizard", - "url": "customize-onboarding-wizard" + "url": "{{siteUrl}}/customize-onboarding-wizard" }, { "label": "Password Page", - "url": "user/1/edit" + "url": "{{siteUrl}}/user/1/edit" }, { "label": "Personal Details Page", - "url": "onboarding-form" + "url": "{{siteUrl}}/onboarding-form" }, { "label": "Address Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/address" + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/address.js" }, { "label": "Contact Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/contact" + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/contact.js" }, { "label": "Payroll Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/payroll" + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/payroll.js" }, { "label": "Emergency Contact Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/emergency_contact" + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/emergency_contact.js" }, { "label": "Dependents Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/dependents" + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/dependents.js" }, { "label": "Profile Picture Page", - "url": "onboarding-form", - "onReadyScript": "onboarding-wizard/profile_picture" + "url": "{{siteUrl}}/onboarding-form", + "onReadyScript": "onboarding-wizard/profile_picture.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json index 8a39337cc2a..d571ce80131 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json @@ -2,7 +2,7 @@ "scenarios": [ { "label": "SSP - Dashboard", - "url": "dashboard" + "url": "{{siteUrl}}/dashboard" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json index 2683617361f..0573c194913 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json @@ -2,12 +2,12 @@ "scenarios": [ { "label": "SSP - HR Resources", - "url": "hr-resources" + "url": "{{siteUrl}}/hr-resources" }, { "label": "SSP - HR Resources - See Resources", - "url": "hr-resources", - "onReadyScript": "ssp/hr-resources-see-resources" + "url": "{{siteUrl}}/hr-resources", + "onReadyScript": "ssp/hr-resources-see-resources.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json index 3f560a7f30d..b2b6338d43b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json @@ -2,12 +2,12 @@ "scenarios": [ { "label": "SSP - HR Vacancies", - "url": "hr-vacancies" + "url": "{{siteUrl}}/hr-vacancies" }, { "label": "SSP - HR Vacancies - More Details", - "url": "hr-vacancies", - "onReadyScript": "ssp/vacancies-more-details" + "url": "{{siteUrl}}/hr-vacancies", + "onReadyScript": "ssp/vacancies-more-details.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json index abc0ddd8f82..1a4e9452580 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json @@ -2,21 +2,18 @@ "scenarios": [ { "label": "Current Month: Manager Leave Calendar", - "url": "manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_current-month-visible", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js" }, { "label": "Legend expanded: Manager Leave Calendar", - "url": "manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_legend-expanded", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js" }, { "label": "Show all contacts: Manager Leave Calendar", - "url": "manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_all-contacts", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json index 55be5f87eca..d84d986f2b7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json @@ -2,15 +2,13 @@ "scenarios": [ { "label": "SSP Leave and Absences: Admin: Manager Leave: Leave Requests", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/admin/manager-leave-requests", - "credential": "admin" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/admin/manager-leave-requests.js" }, { "label": "SSP Leave and Absences: Admin: Manager Leave: Leave Requests: All Requests", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/admin/manager-leave-requests-all-requests", - "credential": "admin" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/admin/manager-leave-requests-all-requests.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json index 593a8241af7..f70603f7c0b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json @@ -1,51 +1,44 @@ { - "scenarios": [{ + "scenarios": [ + { "label": "Leave and Absences: Manager Leave Requests: Show actions", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-show-actions", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/leave-requests-show-actions.js" }, { "label": "Leave and Absences: Manager Leave Requests: Show Without Filters", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-without-filters", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/leave-requests-without-filters.js" }, { "label": "Leave and Absences: Manager Leave Requests: Show With Filters", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-with-filters", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/leave-requests-with-filters.js" }, { "label": "Leave and Absences: Manager Leave Requests: Show staff edit toil request", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-toil", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js" }, { "label": "Leave and Absences: Manager Leave Requests: Show staff edit sickness request", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js" }, { "label": "Leave and Absences: Manager Leave Requests: Apply leave on behalf of staff", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-on-behalf-of-staff", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js" }, { "label": "Leave and Absences: Manager Leave Requests: Apply sickness on behalf of staff", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/sick-requests-on-behalf-of-staff", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js" }, { "label": "Leave and Absences: Manager Leave Requests: Apply toil on behalf of staff", - "url": "manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/toil-requests-on-behalf-of-staff", - "credential": "manager" + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json index 0bf9a0a1af2..07b8f636f46 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json @@ -2,15 +2,13 @@ "scenarios": [ { "label": "Current Month: My Leave Calendar", - "url": "my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_current-month-visible", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/calendar", + "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js" }, { "label": "My Leave Calendar tooltip", - "url": "my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_tooltip", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/calendar", + "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_tooltip.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json index fb1d214d625..cc518a01e5a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json @@ -2,27 +2,23 @@ "scenarios": [ { "label": "Leave and Absences: My report: Leave Request Modal: Edit: Show comments", - "url": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-pending-show-comments", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp-leave-absences/staff/my-report-pending-show-comments.js" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show absence in hours", - "url": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-show-absence-in-hours", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp-leave-absences/staff/my-report-show-absence-in-hours.js" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields", - "url": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields expanded", - "url": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json index 7e389adbeaa..3ce1438033c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json @@ -2,9 +2,8 @@ "scenarios": [ { "label": "Leave and Absences: My report", - "url": "my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report", - "credential": "staff" + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp-leave-absences/staff/my-report.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json index 9827f5f163f..93a9f4fdfa2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json @@ -2,12 +2,12 @@ "scenarios": [ { "label": "SSP - My Details", - "url": "hr-details" + "url": "{{siteUrl}}/hr-details" }, { "label": "SSP - Edit My Details", - "url": "hr-details", - "onReadyScript": "ssp/edit-my-details" + "url": "{{siteUrl}}/hr-details", + "onReadyScript": "ssp/edit-my-details.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json index ceea6b6d8a7..1a1d7433290 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json @@ -2,19 +2,19 @@ "scenarios": [ { "label": "SSP - Reports", - "url": "reports" + "url": "{{siteUrl}}/reports" }, { "label": "SSP - Reports people", - "url": "reports/people/" + "url": "{{siteUrl}}/reports/people/" }, { "label": "SSP - Reports - Leave and Absence", - "url": "reports/leave_and_absence/" + "url": "{{siteUrl}}/reports/leave_and_absence/" }, { "label": "SSP - Reports - Age groups", - "url": "reports/settings/age_group/" + "url": "{{siteUrl}}/reports/settings/age_group/" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json index 2b133e8b1bc..83d0fb67d65 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json @@ -2,7 +2,7 @@ "scenarios": [ { "label": "SSP - Staff Directory", - "url": "staff-directory" + "url": "{{siteUrl}}/staff-directory" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json index e1585c7b05e..2fc2c03907c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json @@ -2,20 +2,17 @@ "scenarios": [ { "label": "SSP - Tasks", - "url": "tasks-and-documents", - "credential": "admin" + "url": "{{siteUrl}}/tasks-and-documents" }, { "label": "SSP - Tasks - Show Completed tasks", - "url": "tasks-and-documents", - "onReadyScript": "ssp/tasks-show-completed-tasks", - "credential": "admin" + "url": "{{siteUrl}}/tasks-and-documents", + "onReadyScript": "ssp/tasks-show-completed-tasks.js" }, { "label": "SSP - Tasks - Create new tasks", - "url": "tasks-and-documents", - "onReadyScript": "ssp/tasks-create-new-task", - "credential": "super-admin" + "url": "{{siteUrl}}/tasks-and-documents", + "onReadyScript": "ssp/tasks-create-new-task.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-calendar.json index 55b3742f606..d8cc9f6242d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-calendar.json @@ -2,9 +2,7 @@ "scenarios": [ { "label": "T&A / Calendar", - "url": "civicrm/tasksassignments/dashboard#/calendar", - "onReadyScript": "close-any-modal", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/calendar" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json index 6f222b6eed1..25abc9f1753 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json @@ -2,45 +2,37 @@ "scenarios": [ { "label": "T&A / Documents", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "close-any-modal", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents" }, { "label": "T&A / Documents / Advanced Filters", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "documents/advanced-filters", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/advanced-filters.js" }, { "label": "T&A / Documents / Document / Add", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "documents/document/add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/document/add.js" }, { "label": "T&A / Documents / Document / Show All Fields", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "documents/document/show-all-fields", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/document/show-all-fields.js" }, { "label": "T&A / Documents / Document / Select Type", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "documents/document/select-type", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/document/select-type.js" }, { "label": "T&A / Documents / Document / Select Assignee", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "documents/document/select-assignee", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/document/select-assignee.js" }, { "label": "T&A / Documents / Document / Pick Due Date", - "url": "civicrm/tasksassignments/dashboard#/documents", - "onReadyScript": "documents/document/pick-due-date", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/document/pick-due-date.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-tasks.json index 622b74656a7..5b81afb7900 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-tasks.json @@ -2,123 +2,103 @@ "scenarios": [ { "label": "T&A / Tasks", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/task", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/task.js" }, { "label": "T&A / Tasks / Advanced Filters", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/advanced-filters", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/advanced-filters.js" }, { "label": "T&A / Tasks / Select Dates", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/select-dates", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/select-dates.js" }, { "label": "T&A / Tasks / Assignment / Add", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/assignment/add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/assignment/add.js" }, { "label": "T&A / Tasks / Assignment / Select Type", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/assignment/select-type", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/assignment/select-type.js" }, { "label": "T&A / Tasks / Assignment / Add Task", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/assignment/add-task", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/assignment/add-task.js" }, { "label": "T&A / Tasks / Assignment / Add Document", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/assignment/add-document", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/assignment/add-document.js" }, { "label": "T&A / Tasks / Assignment / Pick Date", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/assignment/pick-date", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/assignment/pick-date.js" }, { "label": "T&A / Tasks / Task / In Place Edit / Due Date", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/editable-date", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/editable-date.js" }, { "label": "T&A / Tasks / Task / In Place Edit / Subject", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/editable-subject", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/editable-subject.js" }, { "label": "T&A / Tasks / Task / In Place Edit / Target", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/editable-target", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/editable-target.js" }, { "label": "T&A / Tasks / Task / In Place Edit / Assigned To", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/editable-assigned", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/editable-assigned.js" }, { "label": "T&A / Tasks / Task / Add", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/add", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/add.js" }, { "label": "T&A / Tasks / Task / Pick Date", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/pick-date", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/pick-date.js" }, { "label": "T&A / Tasks / Task / Select Assignee", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/select-assignee", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/select-assignee.js" }, { "label": "T&A / Tasks / Task / Select Type", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/select-type", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/select-type.js" }, { "label": "T&A / Tasks / Task / Show All Fields", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/show-all-fields", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/show-all-fields.js" }, { "label": "T&A / Tasks / Task / Show More", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/show-more", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/show-more.js" }, { "label": "T&A / Tasks / Task / Actions", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/actions", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/actions.js" }, { "label": "T&A / Tasks / Task / Open", - "url": "civicrm/tasksassignments/dashboard#/tasks", - "onReadyScript": "tasks/task/open", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/tasks", + "onReadyScript": "tasks/task/open.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json index 29026a7c13c..50d738a53ae 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json @@ -2,45 +2,38 @@ "scenarios": [ { "label": "Absence / Report", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-report", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-report.js" }, { "label": "Absence / Report / Open Section", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-report-open-section", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-report-open-section.js" }, { "label": "Absence / Report / Actions", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-report-actions", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-report-actions.js" }, { "label": "Absence / Calendar / Current Month", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-calendar", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-calendar.js" }, { "label": "Absence / Entitlements", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-entitlements", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-entitlements.js" }, { "label": "Absence / Work Patterns", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-work-patterns", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-work-patterns.js" }, { "label": "Absence / Work Patterns / Custom Work Patterns Modal", - "url": "civicrm/contact/view?reset=1&cid={{contactId:staff}}&selectedChild=absence", - "onReadyScript": "contact-summary/absence/tab-work-patterns-modal", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "onReadyScript": "contact-summary/absence/tab-work-patterns-modal.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json index dda9f1a91f0..f7a30474b88 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json @@ -2,9 +2,8 @@ "scenarios": [ { "label": "Documents", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/documents/show", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/documents/show.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json index 708139b0d16..35bf0b66bef 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json @@ -2,75 +2,63 @@ "scenarios": [ { "label": "Job Contract", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/summary", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/summary.js" }, { "label": "Job Contract / Full History", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/full-history", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/full-history.js" }, { "label": "Job Contract / Delete Dialog", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/delete-dialog", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/delete-dialog.js" }, { "label": "Job Contract / Modal / Tab / General", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-general", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-general.js" }, { "label": "Job Contract / Modal / Tab / Hours", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-hours", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-hours.js" }, { "label": "Job Contract / Modal / Tab / Pay", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-pay", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-pay.js" }, { "label": "Job Contract / Modal / Tab / Leave", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-leave", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-leave.js" }, { "label": "Job Contract / Modal / Tab / Insurance", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-insurance", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-insurance.js" }, { "label": "Job Contract / Modal / Tab / Pension", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-pension", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-pension.js" }, { "label": "Job Contract / Modal / Tab / Funding", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/tab-funding", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/tab-funding.js" }, { "label": "Job Contract / Modal / Correct Error ", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/correct-error", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/correct-error.js" }, { "label": "Job Contract / Modal / Change Terms ", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-contract/change-terms", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-contract/change-terms.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json index 86345bd47db..85ffd1e67da 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json @@ -2,57 +2,48 @@ "scenarios": [ { "label": "Job Roles / Basic Details", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/basic-details", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/basic-details.js" }, { "label": "Job Roles / Funding", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/funding", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/funding.js" }, { "label": "Job Roles / Cost Centres", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/cost-centres", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/cost-centres.js" }, { "label": "Job Roles / Delete Dialog", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/delete-dialog", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/delete-dialog.js" }, { "label": "Job Roles / Add New", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/add-new", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/add-new.js" }, { "label": "Job Roles / Basic Details / Edit", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/basic-details-edit", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/basic-details-edit.js" }, { "label": "Job Roles / Basic Details / Open ui select", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/open-ui-select", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/open-ui-select.js" }, { "label": "Job Roles / Funding / Edit", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/funding-edit", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/funding-edit.js" }, { "label": "Job Roles / Cost Centres / Edit", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/job-roles/cost-centres-edit", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/job-roles/cost-centres-edit.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json index 07d9a7df4fb..b43e3a15bda 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json @@ -2,9 +2,8 @@ "scenarios": [ { "label": "Tasks", - "url": "index.php?q=civicrm/contact/view&reset=1&cid={{contactId:staff}}", - "onReadyScript": "contact-summary/tasks/show", - "credential": "admin" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/tasks/show.js" } ] } From 451164ed6de8266aa617d1370710fc3abed16aa3 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 19 Mar 2018 16:29:39 +0100 Subject: [PATCH 036/251] PCHR-3221: Update config template file --- .../backstop_data/backstop.tpl.json | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json index 13c83ff41f3..2e78c27a1f7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json @@ -5,16 +5,24 @@ "width": 1920, "height": 900 }], + "onBeforeScript": "onBefore.js", + "onReadyScript": "onReady.js", "scenarios": [], "paths": { "bitmaps_reference": "backstop_data/screenshots/reference", "bitmaps_test": "backstop_data/screenshots/test", - "casper_scripts": "backstop_data/casper_scripts", + "engine_scripts": "backstop_data/engine_scripts/chromy", "html_report": "backstop_data/html_report", "ci_report": "backstop_data/ci_report" }, - "casperFlags": [], - "engine": "phantomjs", - "report": ["CI", "browser"], - "debug": false + "report": ["browser"], + "engine": "chrome", + "engineFlags": [], + "engineOptions": { + "waitTimeout": 12000 + }, + "asyncCaptureLimit": 1, + "asyncCompareLimit": 50, + "debug": false, + "debugWindow": false } From 7fdd664de60ff4653b1df149685c1e772a4b0f06 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 19 Mar 2018 16:29:58 +0100 Subject: [PATCH 037/251] PCHR-3221: Remove left over files --- .../data/onboarding-wizard-data.js | 9 ----- .../backstop_data/utils/custom-casperjs.js | 36 ------------------- 2 files changed, 45 deletions(-) delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/data/onboarding-wizard-data.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/utils/custom-casperjs.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/data/onboarding-wizard-data.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/data/onboarding-wizard-data.js deleted file mode 100644 index 46092abdb64..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/data/onboarding-wizard-data.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = (function () { - return { - dependents: { - '#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000': 'Duke', - '#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001': '1234', - '#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010': 'sibling' - } - }; -})(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/utils/custom-casperjs.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/utils/custom-casperjs.js deleted file mode 100644 index 564546a4179..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/utils/custom-casperjs.js +++ /dev/null @@ -1,36 +0,0 @@ -var _ = require('lodash'); -var casper; - -// Methods that will override the default CasperJS methods -var overrides = { - - /** - * Customized version of the default casperjs' click handler - * If the given selector doesn't exist, it exits with an error - */ - click: function () { - var selector = arguments[0]; - - if (this.exists(selector)) { - this.originalMethods.click.apply(this, arguments); - } else { - this.echo('The selector `' + selector + '` doesn\'t exist!', 'WARN_BAR'); - } - } -}; - -module.exports = function (_casper_) { - casper = _casper_; - - if (!casper.originalMethods) { - casper.originalMethods = {}; - - _(overrides) - .each(function (method, name) { - casper.originalMethods[name] = casper[name]; - casper[name] = method.bind(casper); - }); - } - - return casper; -}; From 36ee11a47137af6878486af63f9dffcbe8287868 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 10:10:57 +0100 Subject: [PATCH 038/251] PCHR-3221: Refactor backstopjs task code --- .../gulp/tasks/backstopjs.js | 113 ++++++++---------- 1 file changed, 52 insertions(+), 61 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 4bd6bba625f..a352adb684c 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -45,11 +45,11 @@ module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (ac * @return {String} */ function constructBackstopJSScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles) { - scenarioUrl = scenarioUrl.replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, contactRole) { - return contactIdsByRoles[contactRole]; - }); - - return siteUrl + '/' + scenarioUrl; + return scenarioUrl + .replace('{{siteUrl}}', siteUrl) + .replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, contactRole) { + return contactIdsByRoles[contactRole]; + }); } /** @@ -91,24 +91,6 @@ function getRolesAndIDs () { }); } -/** - * Creates the site config file is in the backstopjs folder, if it doesn't exists yet - * - * @return {Boolean} Whether the file had to be created or not - */ -function touchConfigFile () { - var created = false; - - try { - fs.readFileSync(BACKSTOP_DIR_PATH + FILES.config); - } catch (err) { - fs.writeFileSync(BACKSTOP_DIR_PATH + FILES.config, JSON.stringify(CONFIG_TPL, null, 2)); - created = true; - } - - return created; -} - /** * Runs backstopJS with the given command. * @@ -167,35 +149,13 @@ function runBackstopJS (command) { } /** - * Creates the content of the config temporary file that will be fed to BackstopJS - * The content is the mix of the config template and the list of scenarios - * under the scenarios/ folder + * Concatenates all the scenarios (if no specific scenario file is specified) * * @param {Object} contactIdsByRoles - * @return {String} - */ -function tempFileContent (contactIdsByRoles) { - var config = JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.config)); - var content = JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.tpl)); - - content.scenarios = scenariosList().map(function (scenario) { - scenario.url = constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles); - - return scenario; - }); - - return JSON.stringify(content); -} - -/** - * Concatenates all the scenarios, or returns only the scenario passed as - * an argument to the gulp task - * - * The first scenario of the list gets the login script to run - * * @return {Array} */ -function scenariosList () { +function scenariosList (contactIdsByRoles) { + var config = JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.config)); var scenariosPath = BACKSTOP_DIR_PATH + 'scenarios/'; return _(fs.readdirSync(scenariosPath)) @@ -206,29 +166,60 @@ function scenariosList () { return JSON.parse(fs.readFileSync(scenariosPath + scenarioFile)).scenarios; }) .flatten() - .map(function (scenario) { - return _.assign(scenario, { delay: scenario.delay || 6000 }); + .map(function (scenario, index, scenarios) { + return _.assign(scenario, { + count: '(' + (index + 1) + ' of ' + scenarios.length + ')', + credential: scenario.credential || DEFAULT_CREDENTIAL, + delay: scenario.delay || 6000, + url: constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles) + }); }) .tap(function (scenarios) { var previousCredential; - scenarios.forEach(function (scenario, index) { - scenario.credential = scenario.credential || DEFAULT_CREDENTIAL; - scenario.count = '(' + (index + 1) + ' of ' + scenarios.length + ')'; - scenario.onBeforeScript = 'init'; - + return scenarios.map(function (scenario, index) { if (index === 0 || previousCredential !== scenario.credential) { scenario.performLogin = true; - - if (index !== 0) { - scenario.performLogout = true; - } + scenario.performLogout = index !== 0; } previousCredential = scenario.credential; - }); - return scenarios; + return scenario; + }); }) .value(); } + +/** + * Creates the content of the config temporary file that will be fed to BackstopJS + * The content is the mix of the config template and the list of scenarios + * under the scenarios/ folder + * + * @return {String} + */ +function tempFileContent (contactIdsByRoles) { + var content = JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.tpl)); + + content.scenarios = scenariosList(contactIdsByRoles); + + return JSON.stringify(content); +} + +/** + * Creates the site config file is in the backstopjs folder, if it doesn't exists yet + * + * @return {Boolean} Whether the file had to be created or not + */ +function touchConfigFile () { + var created = false; + + try { + fs.readFileSync(BACKSTOP_DIR_PATH + FILES.config); + } catch (err) { + fs.writeFileSync(BACKSTOP_DIR_PATH + FILES.config, JSON.stringify(CONFIG_TPL, null, 2)); + created = true; + } + + return created; +} From 9c5ed2ca9aed44d30eb6d3afa8e87c790b9b601f Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 10:15:33 +0100 Subject: [PATCH 039/251] PCHR-3221: Use user-based cookies to login --- .../gulp/tasks/backstopjs.js | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index a352adb684c..09186f38e15 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -14,16 +14,9 @@ var utils = require('../utils'); var BACKSTOP_DIR = 'backstop_data/'; var BACKSTOP_DIR_PATH = path.join(__dirname, '..', '..', BACKSTOP_DIR); -var DEFAULT_CREDENTIAL = 'admin'; var FILES = { config: 'site-config.json', tpl: 'backstop.tpl.json' }; var CONFIG_TPL = { - 'url': 'http://%{site-host}', - 'credentials': { - 'super-admin': { 'name': '%{admin-name}', 'pass': '%{admin-password}' }, - 'admin': { 'name': '%{admin-name}', 'pass': '%{admin-password}' }, - 'manager': { 'name': '%{manager-name}', 'pass': '%{manager-password}' }, - 'staff': { 'name': '%{staff-name}', 'pass': '%{staff-password}' } - } + 'url': 'http://%{site-host}' }; module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (action) { @@ -168,26 +161,12 @@ function scenariosList (contactIdsByRoles) { .flatten() .map(function (scenario, index, scenarios) { return _.assign(scenario, { + cookiePath: path.join(BACKSTOP_DIR, 'cookies', (scenario.user || 'admin') + '.json'), count: '(' + (index + 1) + ' of ' + scenarios.length + ')', - credential: scenario.credential || DEFAULT_CREDENTIAL, delay: scenario.delay || 6000, url: constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles) }); }) - .tap(function (scenarios) { - var previousCredential; - - return scenarios.map(function (scenario, index) { - if (index === 0 || previousCredential !== scenario.credential) { - scenario.performLogin = true; - scenario.performLogout = index !== 0; - } - - previousCredential = scenario.credential; - - return scenario; - }); - }) .value(); } From 1905378904d3e0e822d44affbc8c9bd5524aea92 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 10:55:09 +0100 Subject: [PATCH 040/251] PCHR-3221: Write cookies as part of the backstopjs task --- uk.co.compucorp.civicrm.hrcore/.gitignore | 1 + .../backstop_data/engine_scripts/cookies.json | 14 ---- .../gulp/tasks/backstopjs.js | 75 +++++++++++++++++-- 3 files changed, 69 insertions(+), 21 deletions(-) delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json diff --git a/uk.co.compucorp.civicrm.hrcore/.gitignore b/uk.co.compucorp.civicrm.hrcore/.gitignore index dbd43d9fc9d..cd5f06c7e25 100644 --- a/uk.co.compucorp.civicrm.hrcore/.gitignore +++ b/uk.co.compucorp.civicrm.hrcore/.gitignore @@ -1,5 +1,6 @@ backstop_data/backstop.temp.json backstop_data/site-config.json backstop_data/ci_report* +backstop_data/cookies backstop_data/html_report* backstop_data/screenshots diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json deleted file mode 100644 index d27f8ccdc51..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/cookies.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "domain": "localhost", - "path": "/", - "name": "SESSb0d2aa2a780887ad78e3ed54c39c415d", - "value": "OW9Zf08Up3zz_0wM58j3feR7kE7f1QddrmTmHoFu47s", - "expirationDate": 1522873084, - "hostOnly": false, - "httpOnly": true, - "secure": false, - "session": true, - "sameSite": "no_restriction" - } -] diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 09186f38e15..2809e25957c 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -2,6 +2,7 @@ var _ = require('lodash'); var argv = require('yargs').argv; var backstopjs = require('backstopjs'); var clean = require('gulp-clean'); +var Chromy = require('chromy'); var exec = require('child_process').exec; var file = require('gulp-file'); var fs = require('fs'); @@ -14,7 +15,7 @@ var utils = require('../utils'); var BACKSTOP_DIR = 'backstop_data/'; var BACKSTOP_DIR_PATH = path.join(__dirname, '..', '..', BACKSTOP_DIR); -var FILES = { config: 'site-config.json', tpl: 'backstop.tpl.json' }; +var FILES = { siteConfig: 'site-config.json', tpl: 'backstop.tpl.json' }; var CONFIG_TPL = { 'url': 'http://%{site-host}' }; @@ -96,7 +97,7 @@ function getRolesAndIDs () { function runBackstopJS (command) { var destFile = 'backstop.temp.json'; - if (touchConfigFile()) { + if (touchSiteConfigFile()) { utils.throwError( 'No site-config.json file detected!\n' + '\tOne has been created for you under ' + BACKSTOP_DIR + '\n' + @@ -104,7 +105,8 @@ function runBackstopJS (command) { ); } - return getRolesAndIDs() + return writeCookies() + .then(getRolesAndIDs) .then(function (contactIdsByRoles) { return new Promise(function (resolve, reject) { var isBackstopJSSuccessful; @@ -148,7 +150,7 @@ function runBackstopJS (command) { * @return {Array} */ function scenariosList (contactIdsByRoles) { - var config = JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.config)); + var config = siteConfig(); var scenariosPath = BACKSTOP_DIR_PATH + 'scenarios/'; return _(fs.readdirSync(scenariosPath)) @@ -170,6 +172,15 @@ function scenariosList (contactIdsByRoles) { .value(); } +/** + * Returns the content of site config file + * + * @return {Object} + */ +function siteConfig () { + return JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.siteConfig)); +} + /** * Creates the content of the config temporary file that will be fed to BackstopJS * The content is the mix of the config template and the list of scenarios @@ -190,15 +201,65 @@ function tempFileContent (contactIdsByRoles) { * * @return {Boolean} Whether the file had to be created or not */ -function touchConfigFile () { +function touchSiteConfigFile () { var created = false; try { - fs.readFileSync(BACKSTOP_DIR_PATH + FILES.config); + fs.readFileSync(BACKSTOP_DIR_PATH + FILES.siteConfig); } catch (err) { - fs.writeFileSync(BACKSTOP_DIR_PATH + FILES.config, JSON.stringify(CONFIG_TPL, null, 2)); + fs.writeFileSync(BACKSTOP_DIR_PATH + FILES.siteConfig, JSON.stringify(CONFIG_TPL, null, 2)); created = true; } return created; } + +/** + * Writes the session cookie files that will be used to log in as different users + * + * It uses the [`drush uli`](https://drushcommands.com/drush-7x/user/user-login/) + * command to generate a one-time login url, the browser then go to that url + * which then creates the session cookie + * + * The cookie is then stored in a json file which is used by the BackstopJS scenarios + * to log in + * + * @return {Promise} + */ +function writeCookies () { + var port = 9222; + var config = siteConfig(); + var users = ['admin', 'civihr_admin', 'civihr_manager', 'civihr_staff']; + + return Promise.all(users.map(function (user) { + return new Promise(function (resolve, reject) { + var cookieFilePath = path.join(BACKSTOP_DIR_PATH, 'cookies', user + '.json'); + + if (fs.existsSync(cookieFilePath)) { + fs.unlinkSync(cookieFilePath); + } + + exec('drush uli --name=' + user + ' --uri=' + config.url + ' --browser=0', function (err, loginUrl) { + var chromy; + + if (err) { + return reject(new Error(err)); + } + + chromy = new Chromy({ port: port++ }); + chromy.chain() + .goto(config.url) + .goto(loginUrl) + .getCookies() + .result(function (cookies) { + fs.writeFileSync(cookieFilePath, JSON.stringify(cookies)); + }) + .end() + .then(function () { + chromy.close(); + resolve(); + }); + }); + }); + })); +} From b572336aa9640fecb32bc18ad4e158be1cd00cf4 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 11:14:22 +0100 Subject: [PATCH 041/251] PCHR-3221: Use civihr_admin as default user --- uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 2809e25957c..f52eacdb211 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -15,6 +15,7 @@ var utils = require('../utils'); var BACKSTOP_DIR = 'backstop_data/'; var BACKSTOP_DIR_PATH = path.join(__dirname, '..', '..', BACKSTOP_DIR); +var DEFAULT_USER = 'civihr_admin'; var FILES = { siteConfig: 'site-config.json', tpl: 'backstop.tpl.json' }; var CONFIG_TPL = { 'url': 'http://%{site-host}' @@ -162,8 +163,10 @@ function scenariosList (contactIdsByRoles) { }) .flatten() .map(function (scenario, index, scenarios) { + var user = scenario.user || DEFAULT_USER; + return _.assign(scenario, { - cookiePath: path.join(BACKSTOP_DIR, 'cookies', (scenario.user || 'admin') + '.json'), + cookiePath: path.join(BACKSTOP_DIR, 'cookies', user + '.json'), count: '(' + (index + 1) + ' of ' + scenarios.length + ')', delay: scenario.delay || 6000, url: constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles) From b05a6e13be788f53d9389ffc9d2d1dfc8bfd189f Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 11:15:27 +0100 Subject: [PATCH 042/251] PCHR-3221: Set users on scenarios --- .../scenarios/leave-balances.json | 3 ++- .../ssp-la-manager-leave-calendar.json | 9 ++++--- .../ssp-la-manager-leave-requests.json | 24 ++++++++++++------- .../scenarios/ssp-la-my-leave-calendar.json | 6 +++-- .../ssp-la-my-report-leave-request-modal.json | 12 ++++++---- .../scenarios/ssp-la-my-report.json | 3 ++- .../backstop_data/scenarios/ssp-tasks.json | 3 ++- 7 files changed, 40 insertions(+), 20 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json index 153ba60be98..270fde8a932 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json @@ -3,7 +3,8 @@ { "label": "SSP: Leave Balances", "url": "{{siteUrl}}/manager-leave#/manager-leave/leave-balances", - "onReadyScript": "ssp-leave-absences/manager/leave-balances.js" + "onReadyScript": "ssp-leave-absences/manager/leave-balances.js", + "user": "civihr_manager" }, { "label": "Admin Portal: Leave Balances", diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json index 1a4e9452580..c13ff1c43b9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json @@ -3,17 +3,20 @@ { "label": "Current Month: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js" + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js", + "user": "civihr_manager" }, { "label": "Legend expanded: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js" + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js", + "user": "civihr_manager" }, { "label": "Show all contacts: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js" + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js", + "user": "civihr_manager" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json index f70603f7c0b..f370348f3ee 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json @@ -3,42 +3,50 @@ { "label": "Leave and Absences: Manager Leave Requests: Show actions", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-show-actions.js" + "onReadyScript": "ssp-leave-absences/manager/leave-requests-show-actions.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show Without Filters", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-without-filters.js" + "onReadyScript": "ssp-leave-absences/manager/leave-requests-without-filters.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show With Filters", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-with-filters.js" + "onReadyScript": "ssp-leave-absences/manager/leave-requests-with-filters.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show staff edit toil request", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js" + "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show staff edit sickness request", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js" + "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Apply leave on behalf of staff", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js" + "onReadyScript": "ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Apply sickness on behalf of staff", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js" + "onReadyScript": "ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js", + "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Apply toil on behalf of staff", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js" + "onReadyScript": "ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js", + "user": "civihr_manager" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json index 07b8f636f46..0b1494e1188 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json @@ -3,12 +3,14 @@ { "label": "Current Month: My Leave Calendar", "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js" + "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js", + "user": "civihr_staff" }, { "label": "My Leave Calendar tooltip", "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_tooltip.js" + "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_tooltip.js", + "user": "civihr_staff" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json index cc518a01e5a..e973b0c614e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json @@ -3,22 +3,26 @@ { "label": "Leave and Absences: My report: Leave Request Modal: Edit: Show comments", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-pending-show-comments.js" + "onReadyScript": "ssp-leave-absences/staff/my-report-pending-show-comments.js", + "user": "civihr_staff" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show absence in hours", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-show-absence-in-hours.js" + "onReadyScript": "ssp-leave-absences/staff/my-report-show-absence-in-hours.js", + "user": "civihr_staff" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js" + "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js", + "user": "civihr_staff" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields expanded", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js" + "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js", + "user": "civihr_staff" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json index 3ce1438033c..391a60e641d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json @@ -3,7 +3,8 @@ { "label": "Leave and Absences: My report", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report.js" + "onReadyScript": "ssp-leave-absences/staff/my-report.js", + "user": "civihr_staff" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json index 2fc2c03907c..97906e6ad81 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json @@ -12,7 +12,8 @@ { "label": "SSP - Tasks - Create new tasks", "url": "{{siteUrl}}/tasks-and-documents", - "onReadyScript": "ssp/tasks-create-new-task.js" + "onReadyScript": "ssp/tasks-create-new-task.js", + "user": "admin" } ] } From 336185080f9b34de512276d62a343db84b174ccc Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 11:17:57 +0100 Subject: [PATCH 043/251] PCHR-3221: Remove cookies console info --- .../backstop_data/engine_scripts/chromy/loadCookies.js | 1 - 1 file changed, 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js index 6bd1c77de3f..c16ef5503d0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js @@ -18,5 +18,4 @@ module.exports = function (chromy, scenario) { // SET COOKIES VIA CHROMY chromy.setCookie(cookies); - console.log('Cookie state restored with:', JSON.stringify(cookies, null, 2)); }; From ef434bb6e8a3236e9b73bb06073567b8d05a5685 Mon Sep 17 00:00:00 2001 From: Debarshi Bhaumik Date: Tue, 20 Mar 2018 16:17:54 +0530 Subject: [PATCH 044/251] PCHR-3436: Use datepicker from Shoreditch --- hrjobcontract/css/hrjc.css | 316 ++++++++++-------- .../scss/civihr/partials/_datepicker.scss | 76 ----- .../scss/civihr/partials/_forms.scss | 44 +-- hrjobcontract/scss/hrjc.scss | 185 +++++----- 4 files changed, 291 insertions(+), 330 deletions(-) delete mode 100644 hrjobcontract/scss/civihr/partials/_datepicker.scss diff --git a/hrjobcontract/css/hrjc.css b/hrjobcontract/css/hrjc.css index 8256735a85d..e8dc8bdb9db 100644 --- a/hrjobcontract/css/hrjc.css +++ b/hrjobcontract/css/hrjc.css @@ -61,6 +61,7 @@ /* add generic styling for the editor */ /* add the styling for the awesomness of the resizer */ /* copy the popover code from bootstrap so this will work even without it */ + /* stylelint-disable selector-no-qualifying-type */ padding: 20px; min-height: 151px; /** @@ -10793,93 +10794,6 @@ fieldset[disabled] -webkit-box-shadow: none; box-shadow: none; } -/* line 1, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu { - padding: 10px; -} -/* line 5, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker { - -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); - box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); -} -/* line 13, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table:focus, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table:focus { - outline: 0 none; -} -/* line 17, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody { - background-color: #f4f7f8; -} -/* line 20, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody .btn, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn { - background-color: #f4f7f8; - border-radius: 20px; - padding: 7px; - line-height: 1; - width: auto !important; -} -/* line 27, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody .btn:hover, #hrjob-contract .hrjc-datepicker table tbody .btn:active, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn:hover, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn:active { - color: #333; -} -/* line 31, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody .btn:active, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn:active { - -webkit-box-shadow: none; - box-shadow: none; -} -/* line 35, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody .btn:focus, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn:focus { - outline: 0 none; - background-color: #F3F6F7; -} -/* line 40, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody .btn.active, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn.active { - -webkit-box-shadow: none; - box-shadow: none; - background-color: #0071BD; -} -/* line 44, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table tbody .btn.active span, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table tbody .btn.active span { - color: #fff; -} -/* line 51, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table td, #hrjob-contract .hrjc-datepicker table th, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table td, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table th { - padding: 7px; -} -/* line 55, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table thead small, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table thead small { - color: #464354; - font-size: 11px; -} -/* line 61, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table .btn, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table .btn { - border-width: 0; - font-size: 12px; - font-weight: normal; -} -/* line 67, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table .text-muted, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table .text-muted { - color: #CCCCCC; -} -/* line 71, ../scss/civihr/partials/_datepicker.scss */ -#hrjob-contract .hrjc-datepicker table > thead > tr > th, -#hrjob-contract [uib-datepicker-popup-wrap] > .dropdown-menu table > thead > tr > th { - vertical-align: middle; -} /* line 1, ../scss/civihr/partials/_dropdowns.scss */ #hrjob-contract .dropdown-menu { padding: 0; @@ -10897,72 +10811,76 @@ fieldset[disabled] text-align: center; width: 1.25em; } -/* line 1, ../scss/civihr/partials/_forms.scss */ -#hrjob-contract input[type="radio"], -#hrjob-contract input[type="checkbox"], -#hrjob-contract .radio input[type="radio"], -#hrjob-contract .radio-inline input[type="radio"], -#hrjob-contract .checkbox input[type="checkbox"], -#hrjob-contract .checkbox-inline input[type="checkbox"] { +/* line 3, ../scss/civihr/partials/_forms.scss */ +#hrjob-contract input[type='radio'], +#hrjob-contract input[type='checkbox'], +#hrjob-contract .radio input[type='radio'], +#hrjob-contract .radio-inline input[type='radio'], +#hrjob-contract .checkbox input[type='checkbox'], +#hrjob-contract .checkbox-inline input[type='checkbox'] { margin-top: 2px; } -/* line 10, ../scss/civihr/partials/_forms.scss */ +/* line 12, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-file { padding: 6px 12px; } -/* line 14, ../scss/civihr/partials/_forms.scss */ +/* line 16, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-static { padding-bottom: 8px; padding-top: 6px; } -/* line 19, ../scss/civihr/partials/_forms.scss */ +/* line 22, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-static .subfield { display: block; } -/* line 25, ../scss/civihr/partials/_forms.scss */ +/* line 28, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label { text-align: left; } -/* line 28, ../scss/civihr/partials/_forms.scss */ +/* line 31, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label.control-label-line-2 { margin-top: -3px; padding-top: 0; } -/* line 35, ../scss/civihr/partials/_forms.scss */ +/* line 37, ../scss/civihr/partials/_forms.scss */ +#hrjob-contract .form-horizontal .has-feedback { + /* stylelint-disable selector-max-compound-selectors */ +} +/* line 39, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback select + .form-control-feedback { right: 28px; } -/* line 39, ../scss/civihr/partials/_forms.scss */ +/* line 43, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback [uib-datepicker-popup] + .form-control-feedback { right: 41px; } -/* line 43, ../scss/civihr/partials/_forms.scss */ +/* line 47, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback .form-inline { float: left; position: relative; } -/* line 47, ../scss/civihr/partials/_forms.scss */ +/* line 51, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback .form-inline select + .form-control-feedback { right: 10px; } -/* line 54, ../scss/civihr/partials/_forms.scss */ +/* line 58, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .well .form-group { margin-bottom: 0; } -/* line 57, ../scss/civihr/partials/_forms.scss */ +/* line 61, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .well .form-group + .form-group { margin-top: 15px; } -/* line 64, ../scss/civihr/partials/_forms.scss */ +/* line 68, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .text-required { - color: red; + color: #f00; } -/* line 69, ../scss/civihr/partials/_forms.scss */ -#hrjob-contract .form-group.required .control-label:after { - content: "*"; - color: red; +/* line 73, ../scss/civihr/partials/_forms.scss */ +#hrjob-contract .form-group.required .control-label::after { + color: #f00; + content: '*'; } -/* line 75, ../scss/civihr/partials/_forms.scss */ +/* line 79, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .control-label, #hrjob-contract .checkbox-inline, #hrjob-contract .radio-inline, @@ -10971,46 +10889,33 @@ fieldset[disabled] color: #464354; font-weight: 600; } -/* line 89, ../scss/civihr/partials/_forms.scss */ -#hrjob-contract .ta-editor.ta-html, -#hrjob-contract .ta-scroll-window.form-control { - min-height: 120px; - overflow: visible; -} -/* line 95, ../scss/civihr/partials/_forms.scss */ -#hrjob-contract .ta-scroll-window > .ta-bind { - min-height: 120px; -} -/* line 99, ../scss/civihr/partials/_forms.scss */ -#hrjob-contract .ta-toolbar { - background-color: #F3F6F7; - padding: 5px; - margin: 0; - border: 1px solid #C2CFD8; - margin-bottom: -1px; +/* line 88, ../scss/civihr/partials/_forms.scss */ +#hrjob-contract .checkbox-label, +#hrjob-contract .radio-label { + /* stylelint-disable-line scss/at-extend-no-missing-placeholder */ } -/* line 107, ../scss/civihr/partials/_forms.scss */ +/* line 93, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .drop-zone { background-color: #F3F6F7; border: 1px dashed #C2CFD8; color: #464354; } -/* line 113, ../scss/civihr/partials/_forms.scss */ +/* line 99, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-placeholder, #hrjob-contract .ui-select-match-text { font-weight: normal; text-transform: none; } -/* line 119, ../scss/civihr/partials/_forms.scss */ +/* line 105, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-match-text { color: #4D4D69; } -/* line 123, ../scss/civihr/partials/_forms.scss */ +/* line 109, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled] { background-color: #F3F6F7; opacity: 1; } -/* line 127, ../scss/civihr/partials/_forms.scss */ +/* line 113, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled]:hover, #hrjob-contract .ui-select-toggle[disabled]:focus, #hrjob-contract .ui-select-toggle[disabled]:active { background-color: #F3F6F7; } @@ -12142,3 +12047,146 @@ fieldset[disabled] #hrjob-contract .hrjc-wizard .input-inline-lg { max-width: 420px; } +/* line 1, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract [uib-datepicker-popup] { + border-color: #C2CFD8; +} +/* line 4, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract [uib-datepicker-popup] .form-control { + border-color: #C2CFD8; +} +/* line 10, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract [uib-datepicker-popup-wrap] + .input-group-btn > button { + border-color: #C2CFD8; + color: #C2CFD8; +} +/* line 16, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-left, +#hrjob-contract .uib-right, +#hrjob-contract .uib-title { + border: 0; + color: #464354; +} +/* line 22, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-left:hover, +#hrjob-contract .uib-right:hover, +#hrjob-contract .uib-title:hover { + background: transparent; +} +/* line 29, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-left i, +#hrjob-contract .uib-right i { + font-weight: 300; +} +/* line 35, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-title strong { + font-size: 12px; + font-weight: 700; +} +/* line 41, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-daypicker { + outline: 0; +} +/* line 44, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-daypicker th { + background: #FFFFFF; + color: #586277; + padding: 7px; +} +/* line 50, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-daypicker tbody { + background: transparent; + border-top: 0; + box-shadow: 0; +} +/* line 57, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day, +#hrjob-contract .uib-month, +#hrjob-contract .uib-year { + padding: 7px 3px; +} +/* line 62, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .text-muted, +#hrjob-contract .uib-month .text-muted, +#hrjob-contract .uib-year .text-muted { + color: #dcdddd; +} +/* line 66, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .text-info, +#hrjob-contract .uib-month .text-info, +#hrjob-contract .uib-year .text-info { + background-color: transparent; + border-radius: 50%; + color: #0071BD; +} +/* line 72, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .btn-default, +#hrjob-contract .uib-month .btn-default, +#hrjob-contract .uib-year .btn-default { + background: transparent; + border: 0; + color: #464354; + line-height: 1; + min-width: 0; + padding: 7px; +} +/* line 80, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .btn-default span, +#hrjob-contract .uib-month .btn-default span, +#hrjob-contract .uib-year .btn-default span { + padding: 5px !important; +} +/* line 84, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .btn-default.active, +#hrjob-contract .uib-month .btn-default.active, +#hrjob-contract .uib-year .btn-default.active { + background-color: #0071BD; + border-radius: 50%; + box-shadow: none; + color: #FFFFFF; +} +/* line 90, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .btn-default.active .text-info, +#hrjob-contract .uib-month .btn-default.active .text-info, +#hrjob-contract .uib-year .btn-default.active .text-info { + color: inherit; +} +/* line 97, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-datepicker-popup { + border: 0; + padding: 10px; +} +/* line 104, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +.mobile [type='date'][uib-datepicker-popup] { + line-height: normal; +} +/* line 107, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +.mobile [type='date'][uib-datepicker-popup]::-webkit-inner-spin-button, .mobile [type='date'][uib-datepicker-popup]::-webkit-clear-button { + -webkit-appearance: none; + appearance: none; + display: none; +} +/* line 113, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +.mobile [type='date'][uib-datepicker-popup]::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + height: auto; + left: 0; + position: absolute; + right: -50px; + top: 0; + width: auto; +} +/* line 125, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +.mobile [type='date'][uib-datepicker-popup] + .input-group-addon { + border-left: 1px solid #C2CFD8 !important; + height: 32px !important; + line-height: 32px !important; + padding: 0 !important; + pointer-events: none; + position: absolute !important; + right: 0 !important; + width: 38px !important; + z-index: 3; +} diff --git a/hrjobcontract/scss/civihr/partials/_datepicker.scss b/hrjobcontract/scss/civihr/partials/_datepicker.scss deleted file mode 100644 index 60837563288..00000000000 --- a/hrjobcontract/scss/civihr/partials/_datepicker.scss +++ /dev/null @@ -1,76 +0,0 @@ -[uib-datepicker-popup-wrap] > .dropdown-menu { - padding: 10px; -} - -.#{$prefix}datepicker { - @include box-shadow($box-shadow-global); -} - -.#{$prefix}datepicker, -[uib-datepicker-popup-wrap] > .dropdown-menu { - table { - - &:focus { - outline: 0 none; - } - - tbody { - background-color: $brand-secondary; - - .btn { - background-color: $brand-secondary; - border-radius: 20px; - padding: 7px; - line-height: 1; - width: auto !important; - - &:hover, - &:active { - color: $btn-default-color; - } - &:active { - @include box-shadow(none); - } - - &:focus { - outline: 0 none; - background-color: $gray-lighter; - } - - &.active { - @include box-shadow(none); - background-color: $brand-primary; - - span { - color: #fff; - } - } - } - } - - td,th { - padding: 7px; - } - thead { - small { - color: $headings-color; - font-size: 11px; - } - } - - .btn { - border-width: 0; - font-size: 12px; - font-weight: normal; - } - - .text-muted { - color: #CCCCCC; - } - - > thead > tr > th { - vertical-align: middle; - } - } - -} diff --git a/hrjobcontract/scss/civihr/partials/_forms.scss b/hrjobcontract/scss/civihr/partials/_forms.scss index 757c0a6ef73..66721699eec 100755 --- a/hrjobcontract/scss/civihr/partials/_forms.scss +++ b/hrjobcontract/scss/civihr/partials/_forms.scss @@ -1,9 +1,11 @@ -input[type="radio"], -input[type="checkbox"], -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { +/* stylelint-disable selector-no-qualifying-type */ + +input[type='radio'], +input[type='checkbox'], +.radio input[type='radio'], +.radio-inline input[type='radio'], +.checkbox input[type='checkbox'], +.checkbox-inline input[type='checkbox'] { margin-top: 2px; } @@ -16,6 +18,7 @@ input[type="checkbox"], bottom: 8px; top: 6px; } + .subfield { display: block; } @@ -32,6 +35,7 @@ input[type="checkbox"], } .has-feedback { + /* stylelint-disable selector-max-compound-selectors */ select + .form-control-feedback { right: 28px; } @@ -62,13 +66,13 @@ input[type="checkbox"], } .text-required { - color:red; + color: #f00; } .form-group.required { - .control-label:after { - content:"*"; - color:red; + .control-label::after { + color: #f00; + content: '*'; } } @@ -83,25 +87,7 @@ input[type="checkbox"], .checkbox-label, .radio-label { - @extend label; -} - -.ta-editor.ta-html, -.ta-scroll-window.form-control { - min-height: 120px; - overflow: visible; -} - -.ta-scroll-window > .ta-bind { - min-height: 120px; -} - -.ta-toolbar { - background-color: $gray-lighter; - padding: 5px; - margin: 0; - border: 1px solid $input-border; - margin-bottom: -1px; + @extend label; /* stylelint-disable-line scss/at-extend-no-missing-placeholder */ } .drop-zone { diff --git a/hrjobcontract/scss/hrjc.scss b/hrjobcontract/scss/hrjc.scss index 8f69234ccb5..1ad4615cdfb 100644 --- a/hrjobcontract/scss/hrjc.scss +++ b/hrjobcontract/scss/hrjc.scss @@ -1,125 +1,128 @@ -@import "civihr/modules/config"; +@import 'civihr/modules/config'; -@import "compass/css3/border-radius"; -@import "compass/css3/box-shadow"; -@import "compass/css3/animation"; -@import "compass/css3/transform"; +@import 'compass/css3/border-radius'; +@import 'compass/css3/box-shadow'; +@import 'compass/css3/animation'; +@import 'compass/css3/transform'; ##{$module} { //Unset reset.css - @import "civihr/modules/unset"; + @import 'civihr/modules/unset'; // bootstrap-sass v3.3.0.1 // bootstrap/normalize and bootstrap/scaffolding customized to enable // the narrowed scope of the styles for this CiviCRM module only. // ========================================================================== - @import "bootstrap-sprockets"; + @import 'bootstrap-sprockets'; - @import "bootstrap-compass"; - @import "civihr/bootstrap-variables"; + @import 'bootstrap-compass'; + @import 'civihr/bootstrap-variables'; - @import "bootstrap/variables"; - @import "bootstrap/mixins"; + @import 'bootstrap/variables'; + @import 'bootstrap/mixins'; // Reset and dependencies - @import "civihr/bootstrap/normalize-custom"; + @import 'civihr/bootstrap/normalize-custom'; @include normalize; - @import "bootstrap/print"; - @import "civihr/bootstrap/glyphicons-custom"; - @import "civihr/modules/fontawesome"; + @import 'bootstrap/print'; + @import 'civihr/bootstrap/glyphicons-custom'; + @import 'civihr/modules/fontawesome'; // Core CSS - @import "civihr/bootstrap/scaffolding-custom"; + @import 'civihr/bootstrap/scaffolding-custom'; @include scaffolding; - @import "bootstrap/type"; - @import "bootstrap/code"; - @import "bootstrap/grid"; - @import "bootstrap/tables"; - @import "bootstrap/forms"; - @import "bootstrap/buttons"; + @import 'bootstrap/type'; + @import 'bootstrap/code'; + @import 'bootstrap/grid'; + @import 'bootstrap/tables'; + @import 'bootstrap/forms'; + @import 'bootstrap/buttons'; // Components - @import "bootstrap/component-animations"; - @import "bootstrap/dropdowns"; - @import "bootstrap/button-groups"; - @import "bootstrap/input-groups"; - @import "bootstrap/navs"; - @import "bootstrap/navbar"; - @import "bootstrap/breadcrumbs"; - @import "bootstrap/pagination"; - @import "bootstrap/pager"; - @import "bootstrap/labels"; - @import "bootstrap/badges"; - @import "bootstrap/jumbotron"; - @import "bootstrap/thumbnails"; - @import "bootstrap/alerts"; - @import "bootstrap/progress-bars"; - @import "bootstrap/media"; - @import "bootstrap/list-group"; - @import "bootstrap/panels"; - @import "bootstrap/responsive-embed"; - @import "bootstrap/wells"; - @import "bootstrap/close"; + @import 'bootstrap/component-animations'; + @import 'bootstrap/dropdowns'; + @import 'bootstrap/button-groups'; + @import 'bootstrap/input-groups'; + @import 'bootstrap/navs'; + @import 'bootstrap/navbar'; + @import 'bootstrap/breadcrumbs'; + @import 'bootstrap/pagination'; + @import 'bootstrap/pager'; + @import 'bootstrap/labels'; + @import 'bootstrap/badges'; + @import 'bootstrap/jumbotron'; + @import 'bootstrap/thumbnails'; + @import 'bootstrap/alerts'; + @import 'bootstrap/progress-bars'; + @import 'bootstrap/media'; + @import 'bootstrap/list-group'; + @import 'bootstrap/panels'; + @import 'bootstrap/responsive-embed'; + @import 'bootstrap/wells'; + @import 'bootstrap/close'; // Components w/ JavaScript - @import "civihr/bootstrap/modals-custom"; - @import "bootstrap/tooltip"; - @import "bootstrap/popovers"; - @import "bootstrap/carousel"; + @import 'civihr/bootstrap/modals-custom'; + @import 'bootstrap/tooltip'; + @import 'bootstrap/popovers'; + @import 'bootstrap/carousel'; // Utility classes - @import "bootstrap/utilities"; - @import "bootstrap/responsive-utilities"; + @import 'bootstrap/utilities'; + @import 'bootstrap/responsive-utilities'; // CiviHR Theme // ========================================================================== - @import "civihr/modules/variables"; - @import "civihr/modules/print"; - @import "civihr/modules/fonts"; - @import "civihr/modules/angular"; - @import "civihr/modules/utils"; - @import "civihr/modules/select"; - @import "civihr/modules/textangular"; - @import "civihr/modules/mixins"; - @import "civihr/modules/animate"; + @import 'civihr/modules/variables'; + @import 'civihr/modules/print'; + @import 'civihr/modules/fonts'; + @import 'civihr/modules/angular'; + @import 'civihr/modules/utils'; + @import 'civihr/modules/select'; + @import 'civihr/modules/textangular'; + @import 'civihr/modules/mixins'; + @import 'civihr/modules/animate'; - @import "civihr/partials/typography"; - @import "civihr/partials/global"; + @import 'civihr/partials/typography'; + @import 'civihr/partials/global'; @include global; - @import "civihr/partials/badge"; - @import "civihr/partials/buttons"; - @import "civihr/partials/collapse"; - @import "civihr/partials/datepicker"; - @import "civihr/partials/dropdowns"; - @import "civihr/partials/forms"; - @import "civihr/partials/iframe"; - @import "civihr/partials/modals"; - @import "civihr/partials/page-contact"; - @import "civihr/partials/pagination"; - @import "civihr/partials/panels"; - @import "civihr/partials/select"; - @import "civihr/partials/tables"; - @import "civihr/partials/tooltip"; - @import "civihr/partials/wells"; + @import 'civihr/partials/badge'; + @import 'civihr/partials/buttons'; + @import 'civihr/partials/collapse'; + @import 'civihr/partials/dropdowns'; + @import 'civihr/partials/forms'; + @import 'civihr/partials/iframe'; + @import 'civihr/partials/modals'; + @import 'civihr/partials/page-contact'; + @import 'civihr/partials/pagination'; + @import 'civihr/partials/panels'; + @import 'civihr/partials/select'; + @import 'civihr/partials/tables'; + @import 'civihr/partials/tooltip'; + @import 'civihr/partials/wells'; // CiviHR Job Contract Ext. Custom // ========================================================================== - @import "hrjc/modules/print"; - @import "hrjc/modules/animate"; - @import "hrjc/modules/ui-bootstrap"; + @import 'hrjc/modules/print'; + @import 'hrjc/modules/animate'; + @import 'hrjc/modules/ui-bootstrap'; - @import "hrjc/partials/global"; + @import 'hrjc/partials/global'; @include global; - @import "hrjc/partials/buttons"; - @import "hrjc/partials/collapse"; - @import "hrjc/partials/forms"; - @import "hrjc/partials/history"; - @import "hrjc/partials/list"; - @import "hrjc/partials/loader"; - @import "hrjc/partials/modals"; - @import "hrjc/partials/navs"; - @import "hrjc/partials/panels"; - @import "hrjc/partials/summary"; - @import "hrjc/partials/tables"; - @import "hrjc/partials/wizard"; + @import 'hrjc/partials/buttons'; + @import 'hrjc/partials/collapse'; + @import 'hrjc/partials/forms'; + @import 'hrjc/partials/history'; + @import 'hrjc/partials/list'; + @import 'hrjc/partials/loader'; + @import 'hrjc/partials/modals'; + @import 'hrjc/partials/navs'; + @import 'hrjc/partials/panels'; + @import 'hrjc/partials/summary'; + @import 'hrjc/partials/tables'; + @import 'hrjc/partials/wizard'; + + @import '../../../org.civicrm.shoreditch/scss/bootstrap/overrides/variables'; + @import '../../../org.civicrm.shoreditch/scss/bootstrap/mixins/prefix'; + @import '../../../org.civicrm.shoreditch/scss/angular/overrides/uib-datepicker'; } From 832c4310774c11a1bddb96beeaad5e95d2c9505f Mon Sep 17 00:00:00 2001 From: Debarshi Bhaumik Date: Tue, 20 Mar 2018 17:41:47 +0530 Subject: [PATCH 045/251] PCHR-3436: Fix datepicker --- hrjobcontract/css/hrjc.css | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/hrjobcontract/css/hrjc.css b/hrjobcontract/css/hrjc.css index e8dc8bdb9db..9ca54e3cecb 100644 --- a/hrjobcontract/css/hrjc.css +++ b/hrjobcontract/css/hrjc.css @@ -12092,26 +12092,27 @@ fieldset[disabled] background: #FFFFFF; color: #586277; padding: 7px; + vertical-align: middle; } -/* line 50, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 51, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-daypicker tbody { background: transparent; border-top: 0; box-shadow: 0; } -/* line 57, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 58, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day, #hrjob-contract .uib-month, #hrjob-contract .uib-year { - padding: 7px 3px; + padding: 7px; } -/* line 62, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 63, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .text-muted, #hrjob-contract .uib-month .text-muted, #hrjob-contract .uib-year .text-muted { color: #dcdddd; } -/* line 66, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 67, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .text-info, #hrjob-contract .uib-month .text-info, #hrjob-contract .uib-year .text-info { @@ -12119,7 +12120,7 @@ fieldset[disabled] border-radius: 50%; color: #0071BD; } -/* line 72, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 73, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default, #hrjob-contract .uib-month .btn-default, #hrjob-contract .uib-year .btn-default { @@ -12130,13 +12131,7 @@ fieldset[disabled] min-width: 0; padding: 7px; } -/* line 80, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ -#hrjob-contract .uib-day .btn-default span, -#hrjob-contract .uib-month .btn-default span, -#hrjob-contract .uib-year .btn-default span { - padding: 5px !important; -} -/* line 84, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 81, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default.active, #hrjob-contract .uib-month .btn-default.active, #hrjob-contract .uib-year .btn-default.active { @@ -12145,28 +12140,28 @@ fieldset[disabled] box-shadow: none; color: #FFFFFF; } -/* line 90, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 87, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default.active .text-info, #hrjob-contract .uib-month .btn-default.active .text-info, #hrjob-contract .uib-year .btn-default.active .text-info { color: inherit; } -/* line 97, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 94, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-datepicker-popup { border: 0; - padding: 10px; + padding: 10px !important; } -/* line 104, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 101, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup] { line-height: normal; } -/* line 107, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 104, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup]::-webkit-inner-spin-button, .mobile [type='date'][uib-datepicker-popup]::-webkit-clear-button { -webkit-appearance: none; appearance: none; display: none; } -/* line 113, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 110, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup]::-webkit-calendar-picker-indicator { background: transparent; bottom: 0; @@ -12178,7 +12173,7 @@ fieldset[disabled] top: 0; width: auto; } -/* line 125, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 122, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup] + .input-group-addon { border-left: 1px solid #C2CFD8 !important; height: 32px !important; From 64787d790ae2e2791986c7989b1d0294cb1fa68c Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 16:41:08 +0100 Subject: [PATCH 046/251] PCHR-3221: Put back the count message --- .../backstop_data/engine_scripts/chromy/onBefore.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js index 5791e6deaf9..55914dfe650 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js @@ -1,5 +1,7 @@ module.exports = function (chromy, scenario, vp) { - console.log('SCENARIO > ' + scenario.label); + console.log('--------------------------------------------'); + console.log('Running Scenario "' + scenario.label + '" ' + scenario.count); + require('./loadCookies')(chromy, scenario); // IGNORE ANY CERT WARNINGS From a2aa25a07faebcc83e20440f77bf7b06fa0e2466 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 20 Mar 2018 17:39:09 +0100 Subject: [PATCH 047/251] PCHR-3221: Remove delay property --- uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js | 1 - 1 file changed, 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index f52eacdb211..988a3db7feb 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -168,7 +168,6 @@ function scenariosList (contactIdsByRoles) { return _.assign(scenario, { cookiePath: path.join(BACKSTOP_DIR, 'cookies', user + '.json'), count: '(' + (index + 1) + ' of ' + scenarios.length + ')', - delay: scenario.delay || 6000, url: constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles) }); }) From 0570411fc3c06c593ca54b37ff98f2d0dcca5131 Mon Sep 17 00:00:00 2001 From: Debarshi Bhaumik Date: Wed, 21 Mar 2018 15:35:45 +0530 Subject: [PATCH 048/251] PCHR-3436: Fix linting comments --- hrjobcontract/css/hrjc.css | 24 ++++++++++--------- .../scss/civihr/partials/_forms.scss | 3 ++- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/hrjobcontract/css/hrjc.css b/hrjobcontract/css/hrjc.css index 9ca54e3cecb..c913b2885fb 100644 --- a/hrjobcontract/css/hrjc.css +++ b/hrjobcontract/css/hrjc.css @@ -10845,6 +10845,7 @@ fieldset[disabled] /* line 37, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback { /* stylelint-disable selector-max-compound-selectors */ + /* stylelint-enable selector-max-compound-selectors */ } /* line 39, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback select + .form-control-feedback { @@ -10863,24 +10864,25 @@ fieldset[disabled] #hrjob-contract .form-horizontal .has-feedback .form-inline select + .form-control-feedback { right: 10px; } -/* line 58, ../scss/civihr/partials/_forms.scss */ +/* line 59, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .well .form-group { margin-bottom: 0; } -/* line 61, ../scss/civihr/partials/_forms.scss */ +/* line 62, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .well .form-group + .form-group { + /* stylelint-disable-line selector-max-compound-selectors */ margin-top: 15px; } -/* line 68, ../scss/civihr/partials/_forms.scss */ +/* line 69, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .text-required { color: #f00; } -/* line 73, ../scss/civihr/partials/_forms.scss */ +/* line 74, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-group.required .control-label::after { color: #f00; content: '*'; } -/* line 79, ../scss/civihr/partials/_forms.scss */ +/* line 80, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .control-label, #hrjob-contract .checkbox-inline, #hrjob-contract .radio-inline, @@ -10889,33 +10891,33 @@ fieldset[disabled] color: #464354; font-weight: 600; } -/* line 88, ../scss/civihr/partials/_forms.scss */ +/* line 89, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .checkbox-label, #hrjob-contract .radio-label { /* stylelint-disable-line scss/at-extend-no-missing-placeholder */ } -/* line 93, ../scss/civihr/partials/_forms.scss */ +/* line 94, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .drop-zone { background-color: #F3F6F7; border: 1px dashed #C2CFD8; color: #464354; } -/* line 99, ../scss/civihr/partials/_forms.scss */ +/* line 100, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-placeholder, #hrjob-contract .ui-select-match-text { font-weight: normal; text-transform: none; } -/* line 105, ../scss/civihr/partials/_forms.scss */ +/* line 106, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-match-text { color: #4D4D69; } -/* line 109, ../scss/civihr/partials/_forms.scss */ +/* line 110, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled] { background-color: #F3F6F7; opacity: 1; } -/* line 113, ../scss/civihr/partials/_forms.scss */ +/* line 114, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled]:hover, #hrjob-contract .ui-select-toggle[disabled]:focus, #hrjob-contract .ui-select-toggle[disabled]:active { background-color: #F3F6F7; } diff --git a/hrjobcontract/scss/civihr/partials/_forms.scss b/hrjobcontract/scss/civihr/partials/_forms.scss index 66721699eec..69e107d6bd8 100755 --- a/hrjobcontract/scss/civihr/partials/_forms.scss +++ b/hrjobcontract/scss/civihr/partials/_forms.scss @@ -52,13 +52,14 @@ input[type='checkbox'], right: 10px; } } + /* stylelint-enable selector-max-compound-selectors */ } .well { .form-group { margin-bottom: 0; - + .form-group { + + .form-group { /* stylelint-disable-line selector-max-compound-selectors */ margin-top: 15px; } } From 9013b3b0da07ac46dc33b7cb9b96a6ad1a9552f8 Mon Sep 17 00:00:00 2001 From: Debarshi Bhaumik Date: Wed, 21 Mar 2018 16:00:05 +0530 Subject: [PATCH 049/251] PCHR-3436: Fix datepicker for SSP --- hrjobcontract/css/hrjc.css | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/hrjobcontract/css/hrjc.css b/hrjobcontract/css/hrjc.css index c913b2885fb..39aeb8f45bf 100644 --- a/hrjobcontract/css/hrjc.css +++ b/hrjobcontract/css/hrjc.css @@ -12134,6 +12134,12 @@ fieldset[disabled] padding: 7px; } /* line 81, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +#hrjob-contract .uib-day .btn-default span, +#hrjob-contract .uib-month .btn-default span, +#hrjob-contract .uib-year .btn-default span { + padding: 0 !important; +} +/* line 85, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default.active, #hrjob-contract .uib-month .btn-default.active, #hrjob-contract .uib-year .btn-default.active { @@ -12142,28 +12148,28 @@ fieldset[disabled] box-shadow: none; color: #FFFFFF; } -/* line 87, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 91, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default.active .text-info, #hrjob-contract .uib-month .btn-default.active .text-info, #hrjob-contract .uib-year .btn-default.active .text-info { color: inherit; } -/* line 94, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 98, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-datepicker-popup { border: 0; padding: 10px !important; } -/* line 101, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 105, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup] { line-height: normal; } -/* line 104, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 108, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup]::-webkit-inner-spin-button, .mobile [type='date'][uib-datepicker-popup]::-webkit-clear-button { -webkit-appearance: none; appearance: none; display: none; } -/* line 110, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 114, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup]::-webkit-calendar-picker-indicator { background: transparent; bottom: 0; @@ -12175,7 +12181,7 @@ fieldset[disabled] top: 0; width: auto; } -/* line 122, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ +/* line 126, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup] + .input-group-addon { border-left: 1px solid #C2CFD8 !important; height: 32px !important; From 956a126d73e4275d7c75ae11b8073c593af9c1bf Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 21 Mar 2018 16:48:55 +0100 Subject: [PATCH 050/251] PCHR-3221: Make scripts engine agnostic --- .../backstop_data/backstop.tpl.json | 2 +- .../chromy/contact-access-rights/open-ui-select.js | 10 ---------- .../chromy/contact-access-rights/show.js | 7 ------- .../chromy/contact-summary/absence/tab-calendar.js | 7 ------- .../contact-summary/absence/tab-entitlements.js | 7 ------- .../contact-summary/absence/tab-report-actions.js | 10 ---------- .../absence/tab-report-open-section.js | 10 ---------- .../chromy/contact-summary/absence/tab-report.js | 7 ------- .../absence/tab-work-patterns-modal.js | 10 ---------- .../contact-summary/absence/tab-work-patterns.js | 7 ------- .../chromy/contact-summary/documents/show.js | 7 ------- .../contact-summary/job-contract/delete-dialog.js | 10 ---------- .../contact-summary/job-contract/full-history.js | 10 ---------- .../chromy/contact-summary/job-contract/summary.js | 7 ------- .../chromy/contact-summary/job-roles/add-new.js | 10 ---------- .../contact-summary/job-roles/basic-details-edit.js | 10 ---------- .../chromy/contact-summary/job-roles/basic-details.js | 7 ------- .../contact-summary/job-roles/cost-centres-edit.js | 10 ---------- .../chromy/contact-summary/job-roles/cost-centres.js | 10 ---------- .../chromy/contact-summary/job-roles/delete-dialog.js | 10 ---------- .../chromy/contact-summary/job-roles/funding-edit.js | 10 ---------- .../chromy/contact-summary/job-roles/funding.js | 10 ---------- .../contact-summary/job-roles/open-ui-select.js | 10 ---------- .../chromy/contact-summary/tasks/show.js | 7 ------- .../chromy/documents/advanced-filters.js | 7 ------- .../engine_scripts/chromy/documents/document/add.js | 7 ------- .../chromy/documents/document/pick-due-date.js | 9 --------- .../chromy/documents/document/select-assignee.js | 9 --------- .../chromy/documents/document/select-type.js | 9 --------- .../chromy/documents/document/show-all-fields.js | 9 --------- .../chromy/leave-absence-dashboard/import/step-2.js | 7 ------- .../chromy/leave-absence-dashboard/import/step-3.js | 7 ------- .../chromy/leave-absence-dashboard/import/step-4.js | 7 ------- .../leave-balances/leave-balances.js | 7 ------- .../leave-calendar/leave-calendar.js | 7 ------- .../leave-requests/leave-requests-with-filters.js | 10 ---------- .../leave-requests/leave-requests.js | 7 ------- .../backstop_data/engine_scripts/chromy/onBefore.js | 9 --------- .../backstop_data/engine_scripts/chromy/onReady.js | 7 ------- .../chromy/onboarding-wizard/address.js | 7 ------- .../chromy/onboarding-wizard/contact.js | 7 ------- .../chromy/onboarding-wizard/dependents.js | 7 ------- .../chromy/onboarding-wizard/emergency_contact.js | 7 ------- .../chromy/onboarding-wizard/payroll.js | 7 ------- .../chromy/onboarding-wizard/profile_picture.js | 7 ------- .../admin/manager-leave-requests-all-requests.js | 9 --------- .../admin/manager-leave-requests.js | 9 --------- .../ssp-leave-absences/manager/leave-balances.js | 7 ------- .../manager/leave-requests-on-behalf-of-staff.js | 8 -------- .../manager/leave-requests-show-actions.js | 8 -------- .../manager/leave-requests-with-filters.js | 8 -------- .../manager/leave-requests-without-filters.js | 8 -------- .../manager/manager-leave-calendar_all-contacts.js | 7 ------- .../manager-leave-calendar_current-month-visible.js | 7 ------- .../manager/manager-leave-calendar_legend-expanded.js | 7 ------- .../manager/sick-requests-on-behalf-of-staff.js | 8 -------- .../manager/toil-requests-on-behalf-of-staff.js | 8 -------- .../staff/my-leave-calendar_current-month-visible.js | 7 ------- .../staff/my-leave-calendar_tooltip.js | 7 ------- .../chromy/ssp-leave-absences/staff/my-report.js | 8 -------- .../engine_scripts/chromy/ssp/edit-my-details.js | 7 ------- .../chromy/ssp/hr-resources-see-resources.js | 7 ------- .../chromy/ssp/tasks-create-new-task.js | 7 ------- .../chromy/ssp/tasks-show-completed-tasks.js | 7 ------- .../chromy/ssp/vacancies-more-details.js | 7 ------- .../engine_scripts/chromy/tasks/advanced-filters.js | 7 ------- .../chromy/tasks/assignment/add-document.js | 9 --------- .../chromy/tasks/assignment/add-task.js | 9 --------- .../engine_scripts/chromy/tasks/assignment/add.js | 7 ------- .../chromy/tasks/assignment/pick-date.js | 9 --------- .../chromy/tasks/assignment/select-type.js | 9 --------- .../engine_scripts/chromy/tasks/select-dates.js | 7 ------- .../engine_scripts/chromy/tasks/task/actions.js | 7 ------- .../engine_scripts/chromy/tasks/task/add.js | 7 ------- .../chromy/tasks/task/editable-assigned.js | 7 ------- .../engine_scripts/chromy/tasks/task/editable-date.js | 7 ------- .../chromy/tasks/task/editable-subject.js | 7 ------- .../chromy/tasks/task/editable-target.js | 7 ------- .../engine_scripts/chromy/tasks/task/open.js | 7 ------- .../engine_scripts/chromy/tasks/task/pick-date.js | 9 --------- .../chromy/tasks/task/select-assignee.js | 9 --------- .../engine_scripts/chromy/tasks/task/select-type.js | 9 --------- .../engine_scripts/chromy/tasks/task/show-more.js | 7 ------- .../engine_scripts/chromy/tasks/task/task.js | 7 ------- .../chromy/work-patterns/show-calendar-form.js | 7 ------- .../{chromy => }/clickAndHoverHelper.js | 0 .../contact-access-rights/open-ui-select.js | 10 ++++++++++ .../engine_scripts/contact-access-rights/show.js | 7 +++++++ .../contact-summary/absence/tab-calendar.js | 7 +++++++ .../contact-summary/absence/tab-entitlements.js | 7 +++++++ .../contact-summary/absence/tab-report-actions.js | 10 ++++++++++ .../absence/tab-report-open-section.js | 10 ++++++++++ .../contact-summary/absence/tab-report.js | 7 +++++++ .../absence/tab-work-patterns-modal.js | 10 ++++++++++ .../contact-summary/absence/tab-work-patterns.js | 7 +++++++ .../engine_scripts/contact-summary/documents/show.js | 7 +++++++ .../contact-summary/job-contract/change-terms.js | 6 +++--- .../contact-summary/job-contract/correct-error.js | 6 +++--- .../contact-summary/job-contract/delete-dialog.js | 10 ++++++++++ .../contact-summary/job-contract/full-history.js | 10 ++++++++++ .../contact-summary/job-contract/summary.js | 7 +++++++ .../contact-summary/job-contract/tab-funding.js | 6 +++--- .../contact-summary/job-contract/tab-general.js | 6 +++--- .../contact-summary/job-contract/tab-hours.js | 6 +++--- .../contact-summary/job-contract/tab-insurance.js | 6 +++--- .../contact-summary/job-contract/tab-leave.js | 6 +++--- .../contact-summary/job-contract/tab-pay.js | 6 +++--- .../contact-summary/job-contract/tab-pension.js | 6 +++--- .../contact-summary/job-roles/add-new.js | 10 ++++++++++ .../contact-summary/job-roles/basic-details-edit.js | 10 ++++++++++ .../contact-summary/job-roles/basic-details.js | 7 +++++++ .../contact-summary/job-roles/cost-centres-edit.js | 10 ++++++++++ .../contact-summary/job-roles/cost-centres.js | 10 ++++++++++ .../contact-summary/job-roles/delete-dialog.js | 10 ++++++++++ .../contact-summary/job-roles/funding-edit.js | 10 ++++++++++ .../contact-summary/job-roles/funding.js | 10 ++++++++++ .../contact-summary/job-roles/open-ui-select.js | 10 ++++++++++ .../engine_scripts/contact-summary/show-actions.js | 7 +++++++ .../show-actions.js => contact-summary/tasks/show.js} | 4 ++-- .../engine_scripts/documents/advanced-filters.js | 7 +++++++ .../engine_scripts/documents/document/add.js | 7 +++++++ .../documents/document/pick-due-date.js | 9 +++++++++ .../documents/document/select-assignee.js | 9 +++++++++ .../engine_scripts/documents/document/select-type.js | 9 +++++++++ .../documents/document/show-all-fields.js | 9 +++++++++ .../leave-absence-dashboard/import/step-2.js | 7 +++++++ .../leave-absence-dashboard/import/step-3.js | 7 +++++++ .../leave-absence-dashboard/import/step-4.js | 7 +++++++ .../leave-balances/leave-balances.js | 7 +++++++ .../leave-calendar/leave-calendar.js | 7 +++++++ .../leave-requests/leave-requests-with-filters.js | 10 ++++++++++ .../leave-requests/leave-requests.js | 7 +++++++ .../engine_scripts/{chromy => }/loadCookies.js | 0 .../backstop_data/engine_scripts/onBefore.js | 11 ++++++++--- .../backstop_data/engine_scripts/onReady.js | 11 ++++++----- .../engine_scripts/onboarding-wizard/address.js | 7 +++++++ .../engine_scripts/onboarding-wizard/contact.js | 7 +++++++ .../engine_scripts/onboarding-wizard/dependents.js | 7 +++++++ .../onboarding-wizard/emergency_contact.js | 7 +++++++ .../engine_scripts/onboarding-wizard/payroll.js | 7 +++++++ .../onboarding-wizard/profile_picture.js | 7 +++++++ .../admin/manager-leave-requests-all-requests.js | 9 +++++++++ .../admin/manager-leave-requests.js | 9 +++++++++ .../ssp-leave-absences/manager/leave-balances.js | 7 +++++++ .../manager/leave-requests-of-staff-edit-sickness.js | 6 +++--- .../manager/leave-requests-of-staff-edit-toil.js | 6 +++--- .../manager/leave-requests-on-behalf-of-staff.js | 8 ++++++++ .../manager/leave-requests-show-actions.js | 8 ++++++++ .../manager/leave-requests-with-filters.js | 8 ++++++++ .../manager/leave-requests-without-filters.js | 8 ++++++++ .../manager/manager-leave-calendar_all-contacts.js | 7 +++++++ .../manager-leave-calendar_current-month-visible.js | 7 +++++++ .../manager/manager-leave-calendar_legend-expanded.js | 7 +++++++ .../manager/sick-requests-on-behalf-of-staff.js | 8 ++++++++ .../manager/toil-requests-on-behalf-of-staff.js | 8 ++++++++ .../staff/my-leave-calendar_current-month-visible.js | 7 +++++++ .../staff/my-leave-calendar_tooltip.js | 7 +++++++ ...ve-request-modal-show-deduction-fields-expanded.js | 6 +++--- ...eport-leave-request-modal-show-deduction-fields.js | 6 +++--- .../staff/my-report-pending-show-comments.js | 6 +++--- .../staff/my-report-show-absence-in-hours.js | 6 +++--- .../ssp-leave-absences/staff/my-report.js | 8 ++++++++ .../engine_scripts/ssp/edit-my-details.js | 7 +++++++ .../engine_scripts/ssp/hr-resources-see-resources.js | 7 +++++++ .../engine_scripts/ssp/tasks-create-new-task.js | 7 +++++++ .../engine_scripts/ssp/tasks-show-completed-tasks.js | 7 +++++++ .../engine_scripts/ssp/vacancies-more-details.js | 7 +++++++ .../engine_scripts/tasks/advanced-filters.js | 7 +++++++ .../engine_scripts/tasks/assignment/add-document.js | 9 +++++++++ .../engine_scripts/tasks/assignment/add-task.js | 9 +++++++++ .../engine_scripts/tasks/assignment/add.js | 7 +++++++ .../engine_scripts/tasks/assignment/pick-date.js | 9 +++++++++ .../engine_scripts/tasks/assignment/select-type.js | 9 +++++++++ .../engine_scripts/tasks/select-dates.js | 7 +++++++ .../engine_scripts/tasks/task/actions.js | 7 +++++++ .../backstop_data/engine_scripts/tasks/task/add.js | 7 +++++++ .../engine_scripts/tasks/task/editable-assigned.js | 7 +++++++ .../engine_scripts/tasks/task/editable-date.js | 7 +++++++ .../engine_scripts/tasks/task/editable-subject.js | 7 +++++++ .../engine_scripts/tasks/task/editable-target.js | 7 +++++++ .../backstop_data/engine_scripts/tasks/task/open.js | 7 +++++++ .../engine_scripts/tasks/task/pick-date.js | 9 +++++++++ .../engine_scripts/tasks/task/select-assignee.js | 9 +++++++++ .../engine_scripts/tasks/task/select-type.js | 9 +++++++++ .../{chromy => }/tasks/task/show-all-fields.js | 6 +++--- .../engine_scripts/tasks/task/show-more.js | 7 +++++++ .../backstop_data/engine_scripts/tasks/task/task.js | 7 +++++++ .../work-patterns/show-calendar-form.js | 7 +++++++ 188 files changed, 717 insertions(+), 727 deletions(-) delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/clickAndHoverHelper.js (100%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/change-terms.js (54%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/correct-error.js (54%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-funding.js (53%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-general.js (53%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-hours.js (52%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-insurance.js (53%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-leave.js (52%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-pay.js (52%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/contact-summary/job-contract/tab-pension.js (53%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy/contact-summary/show-actions.js => contact-summary/tasks/show.js} (51%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/loadCookies.js (100%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-balances.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js (55%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js (54%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js (72%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js (68%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/ssp-leave-absences/staff/my-report-pending-show-comments.js (64%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/ssp-leave-absences/staff/my-report-show-absence-in-hours.js (56%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{chromy => }/tasks/task/show-all-fields.js (51%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json index 2e78c27a1f7..901999ffa99 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json @@ -11,7 +11,7 @@ "paths": { "bitmaps_reference": "backstop_data/screenshots/reference", "bitmaps_test": "backstop_data/screenshots/test", - "engine_scripts": "backstop_data/engine_scripts/chromy", + "engine_scripts": "backstop_data/engine_scripts", "html_report": "backstop_data/html_report", "ci_report": "backstop_data/ci_report" }, diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js deleted file mode 100644 index 75ff97f2f9d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/open-ui-select.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openManageRightsModal() - .then(function (modal) { - modal.openDropdown('locations'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js deleted file mode 100644 index 1303d5f3f84..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-access-rights/show.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openManageRightsModal(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js deleted file mode 100644 index a802f565ac3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-calendar.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('calendar'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js deleted file mode 100644 index 2694e2eb55b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-entitlements.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('entitlements'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js deleted file mode 100644 index 306cd81e8fe..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-actions.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('report') - .then(function (reportTab) { - reportTab.openSection('pending').showActions(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js deleted file mode 100644 index dcd37454142..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report-open-section.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('report') - .then(function (reportTab) { - reportTab.openSection('pending'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js deleted file mode 100644 index 7cf60023a19..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-report.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('report'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js deleted file mode 100644 index 0b4630e0b66..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns-modal.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('work-patterns') - .then(function (workPatternsTab) { - workPatternsTab.showModal(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js deleted file mode 100644 index ecd0c5c4a7e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/absence/tab-work-patterns.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var absenceTab = require('../../../../page-objects/tabs/absence'); - -module.exports = function (chromy) { - absenceTab.init(chromy).openSubTab('work-patterns'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js deleted file mode 100644 index 319850cdc18..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/documents/show.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('documents'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js deleted file mode 100644 index 6b5fd1962ab..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/delete-dialog.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') - .then(function (tab) { - tab.attemptDelete(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js deleted file mode 100644 index def729b25f0..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/full-history.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') - .then(function (tab) { - tab.showFullHistory(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js deleted file mode 100644 index ec15ff31d23..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/summary.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js deleted file mode 100644 index 3dcdd6d253b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/add-new.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.showAddNew(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js deleted file mode 100644 index 35c3f9dff48..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details-edit.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js deleted file mode 100644 index e5f08a84d5c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/basic-details.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js deleted file mode 100644 index cbe1344b4d8..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres-edit.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres').edit(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js deleted file mode 100644 index 7ef9f56e6a3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/cost-centres.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js deleted file mode 100644 index e757bcc203e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/delete-dialog.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.attemptDelete(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js deleted file mode 100644 index b866c5c8358..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding-edit.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding').edit(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js deleted file mode 100644 index 9f2b7aa345b..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/funding.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js deleted file mode 100644 index e10ff11f5c5..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-roles/open-ui-select.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit().openDropdown('department'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js deleted file mode 100644 index 1dd1c49026d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/tasks/show.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/contact-summary'); - -module.exports = function (chromy) { - page.init(chromy).openTab('tasks'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js deleted file mode 100644 index 77978a1fe17..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/advanced-filters.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/documents'); - -module.exports = function (chromy) { - page.init(chromy).advancedFilters(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js deleted file mode 100644 index 54f4d38c74a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/add.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/documents'); - -module.exports = function (chromy) { - page.init(chromy).addDocument(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js deleted file mode 100644 index 05bd90013a6..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/pick-due-date.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/documents'); - -module.exports = function (chromy) { - page.init(chromy).addDocument().then(function (modal) { - modal.showTab('Assignments').pickDueDate(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js deleted file mode 100644 index c639f109453..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-assignee.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/documents'); - -module.exports = function (chromy) { - page.init(chromy).addDocument().then(function (modal) { - modal.showTab('Assignments').showField('Assignee').selectAssignee(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js deleted file mode 100644 index 78bd7947eba..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/select-type.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/documents'); - -module.exports = function (chromy) { - page.init(chromy).addDocument().then(function (modal) { - modal.selectType(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js deleted file mode 100644 index a27c1b8b207..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/documents/document/show-all-fields.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/documents'); - -module.exports = function (chromy) { - page.init(chromy).addDocument().then(function (modal) { - modal.showTab('Assignments').showField('Assignee').showField('Assignment'); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js deleted file mode 100644 index 3f8292c676a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-2.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-import'); - -module.exports = function (chromy) { - page.init(chromy).showStep2(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js deleted file mode 100644 index 7f57f16aed2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-3.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-import'); - -module.exports = function (chromy) { - page.init(chromy).showStep3(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js deleted file mode 100644 index 17499fc9bfc..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/import/step-4.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-import'); - -module.exports = function (chromy) { - page.init(chromy).showStep4(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js deleted file mode 100644 index 5a116374f57..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-balances/leave-balances.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-dashboard'); - -module.exports = function (chromy) { - page.init(chromy).openTab('leave-balances'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js deleted file mode 100644 index 702e54480c3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-calendar/leave-calendar.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-dashboard'); - -module.exports = function (chromy) { - page.init(chromy).openTab('leave-calendar'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js deleted file mode 100644 index 213df2e9148..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-dashboard'); - -module.exports = function (chromy) { - page.init(chromy).openTab('leave-requests') - .then(function (requestTab) { - requestTab.showFilters(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js deleted file mode 100644 index dfdc299b967..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/leave-absence-dashboard/leave-requests/leave-requests.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/leave-absence-dashboard'); - -module.exports = function (chromy) { - page.init(chromy).openTab('leave-requests'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js deleted file mode 100644 index 55914dfe650..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onBefore.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = function (chromy, scenario, vp) { - console.log('--------------------------------------------'); - console.log('Running Scenario "' + scenario.label + '" ' + scenario.count); - - require('./loadCookies')(chromy, scenario); - - // IGNORE ANY CERT WARNINGS - chromy.ignoreCertificateErrors(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js deleted file mode 100644 index 758a10cb201..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onReady.js +++ /dev/null @@ -1,7 +0,0 @@ -var page = require('../../page-objects/contact-summary'); - -module.exports = function (chromy, scenario, vp) { - require('./clickAndHoverHelper')(chromy, scenario); - - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js deleted file mode 100644 index c3bdc4dee08..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/address.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/onboarding-wizard'); - -module.exports = function (chromy) { - page.init(chromy).reachAddressPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js deleted file mode 100644 index 6a5d1e9661f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/contact.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/onboarding-wizard'); - -module.exports = function (chromy) { - page.init(chromy).reachContactInfoPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js deleted file mode 100644 index df84a693988..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/dependents.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/onboarding-wizard'); - -module.exports = function (chromy) { - page.init(chromy).reachDependentPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js deleted file mode 100644 index c7a89ac569d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/emergency_contact.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/onboarding-wizard'); - -module.exports = function (chromy) { - page.init(chromy).reachEmergencyContactPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js deleted file mode 100644 index 664f376c283..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/payroll.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/onboarding-wizard'); - -module.exports = function (chromy) { - page.init(chromy).reachPayrollPage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js deleted file mode 100644 index 0800fc2c75d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/onboarding-wizard/profile_picture.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/onboarding-wizard'); - -module.exports = function (chromy) { - page.init(chromy).reachProfilePicturePage(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js deleted file mode 100644 index 0f778cf54e9..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests-all-requests.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of Admin -// and have at least one leave request *assigned* to the Admin -module.exports = function (chromy) { - page.init(chromy).changeFilterByAssignee('all'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js deleted file mode 100644 index 698604b2a5f..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/admin/manager-leave-requests.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of Admin -// and have at least one leave request *assigned* to the Admin -module.exports = function (chromy) { - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js deleted file mode 100644 index c2c42f71a21..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-balances.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); - -module.exports = function (chromy) { - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js deleted file mode 100644 index 08055fb2c77..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager -module.exports = function (chromy) { - page.init(chromy).applyLeaveForStaff('leave'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js deleted file mode 100644 index 075a3078b67..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-show-actions.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one leave request -module.exports = function (chromy) { - page.init(chromy).openActionsForRow(1); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js deleted file mode 100644 index 9825cb9ec10..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-with-filters.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one leave request -module.exports = function (chromy) { - page.init(chromy).expandFilter(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js deleted file mode 100644 index 3db274dcb84..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-without-filters.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager and have at least one leave request -module.exports = function (chromy) { - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js deleted file mode 100644 index cb55d4c0ba7..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-calendar'); - -module.exports = function (chromy) { - page.init(chromy).toggleContactsWithLeaves(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js deleted file mode 100644 index 580870be5a5..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-calendar'); - -module.exports = function (chromy) { - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js deleted file mode 100644 index 9d2fbe7950e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-calendar'); - -module.exports = function (chromy) { - page.init(chromy).toggleLegend(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js deleted file mode 100644 index 540a0c0dd88..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager -module.exports = function (chromy) { - page.init(chromy).applyLeaveForStaff('sickness'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js deleted file mode 100644 index ff974157d6d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); - -// precondition: need to have the login of manager -module.exports = function (chromy) { - page.init(chromy).applyLeaveForStaff('toil'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js deleted file mode 100644 index 7e6a674cb82..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-calendar'); - -module.exports = function (chromy) { - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js deleted file mode 100644 index 8e205d09a91..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-leave-calendar_tooltip.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-calendar'); - -module.exports = function (chromy) { - page.init(chromy).showTooltip(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js deleted file mode 100644 index 0ed50e44777..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); - -// precondition: need to have at least one pending leave request -module.exports = function (chromy) { - page.init(chromy).openSection('pending'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js deleted file mode 100644 index 94323b8ab10..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/edit-my-details.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp/my-details'); - -module.exports = function (chromy) { - page.init(chromy).showEditMyDetailsPopup(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js deleted file mode 100644 index fa2ea19da82..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/hr-resources-see-resources.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp/hr-resources'); - -module.exports = function (chromy) { - page.init(chromy).seeResources(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js deleted file mode 100644 index d37048209d2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-create-new-task.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp/tasks'); - -module.exports = function (chromy) { - page.init(chromy).openCreateNewTaskModal(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js deleted file mode 100644 index 4d1039508c0..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/tasks-show-completed-tasks.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp/tasks'); - -module.exports = function (chromy) { - page.init(chromy).openCompletedTasksModal(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js deleted file mode 100644 index bd2d773074e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp/vacancies-more-details.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/ssp/vacancies'); - -module.exports = function (chromy) { - page.init(chromy).showMoreDetails(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js deleted file mode 100644 index fb8f2e7b9e7..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/advanced-filters.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).advancedFilters(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js deleted file mode 100644 index 53556ea92be..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-document.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addAssignment().then(function (modal) { - modal.selectType().addDocument(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js deleted file mode 100644 index e50e89b0146..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add-task.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addAssignment().then(function (modal) { - modal.selectType().addTask(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js deleted file mode 100644 index 836d3939bd2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/add.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addAssignment(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js deleted file mode 100644 index cbd1216bd41..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/pick-date.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addAssignment().then(function (modal) { - modal.pickDate(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js deleted file mode 100644 index fbe788c5740..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/assignment/select-type.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addAssignment().then(function (modal) { - modal.selectType(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js deleted file mode 100644 index 9a678adbc72..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/select-dates.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).selectDates(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js deleted file mode 100644 index cef021219b2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/actions.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).taskActions(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js deleted file mode 100644 index 7bb3ba67ff3..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/add.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addTask(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js deleted file mode 100644 index 80f7d948657..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-assigned.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).inPlaceEdit('assigned'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js deleted file mode 100644 index e4259f12643..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-date.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).inPlaceEdit('date'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js deleted file mode 100644 index fbdd0db3ebd..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-subject.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).inPlaceEdit('subject'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js deleted file mode 100644 index 5321eafe166..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/editable-target.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).inPlaceEdit('target'); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js deleted file mode 100644 index 36a560c835e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/open.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).openTask(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js deleted file mode 100644 index 84037304b7d..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/pick-date.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addTask().then(function (modal) { - modal.pickDate(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js deleted file mode 100644 index b6241ac9602..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-assignee.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addTask().then(function (modal) { - modal.showField('Assignee').selectAssignee(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js deleted file mode 100644 index f3e6e561fc5..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/select-type.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).addTask().then(function (modal) { - modal.selectType(); - }); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js deleted file mode 100644 index ff00a670e2c..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-more.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy).showMore(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js deleted file mode 100644 index df123456f01..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/task.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../../page-objects/tasks'); - -module.exports = function (chromy) { - page.init(chromy); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js deleted file mode 100644 index 2d22a84c4a7..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/work-patterns/show-calendar-form.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -var page = require('../../../page-objects/work-patterns-form'); - -module.exports = function (chromy) { - page.init(chromy).showCalendarForm(); -}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/clickAndHoverHelper.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/clickAndHoverHelper.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js new file mode 100644 index 00000000000..a94bc167455 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openManageRightsModal() + .then(function (modal) { + modal.openDropdown('locations'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js new file mode 100644 index 00000000000..7e75965376d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openManageRightsModal(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js new file mode 100644 index 00000000000..9ad73715e45 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('calendar'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js new file mode 100644 index 00000000000..926c3f13cf7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('entitlements'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js new file mode 100644 index 00000000000..3931acdb5b6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js @@ -0,0 +1,10 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('report') + .then(function (reportTab) { + reportTab.openSection('pending').showActions(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js new file mode 100644 index 00000000000..d8f01fedf3d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js @@ -0,0 +1,10 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('report') + .then(function (reportTab) { + reportTab.openSection('pending'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js new file mode 100644 index 00000000000..e781a15e0af --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('report'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js new file mode 100644 index 00000000000..65cb0566231 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js @@ -0,0 +1,10 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('work-patterns') + .then(function (workPatternsTab) { + workPatternsTab.showModal(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js new file mode 100644 index 00000000000..0e91f21a02f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js @@ -0,0 +1,7 @@ +'use strict'; + +var absenceTab = require('../../../page-objects/tabs/absence'); + +module.exports = function (engine) { + absenceTab.init(engine).openSubTab('work-patterns'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js new file mode 100644 index 00000000000..29435e11f4d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('documents'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js similarity index 54% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js index 58eb3e0ae89..2e1a40d780d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/change-terms.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openContractModal('revision'); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js similarity index 54% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js index f68b64137bc..af4fc737916 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/correct-error.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openContractModal('correct'); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js new file mode 100644 index 00000000000..e33d92d1df2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-contract') + .then(function (tab) { + tab.attemptDelete(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js new file mode 100644 index 00000000000..c5dc37ae205 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-contract') + .then(function (tab) { + tab.showFullHistory(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js new file mode 100644 index 00000000000..527afbf32d8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-contract'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js similarity index 53% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js index db27357a4fc..15f9a456a82 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-funding.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js similarity index 53% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js index da8529d08bc..c45c816986a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-general.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js similarity index 52% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js index 09a937fdc25..1d4fea6a42b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-hours.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js similarity index 53% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js index 6466054dfdd..c067affb4b2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-insurance.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js similarity index 52% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js index 8d5293ba8ec..1539d809fbe 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-leave.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js similarity index 52% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js index af2c04ef00f..e7d3934860e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pay.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js similarity index 53% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js index 308a9ae8bd7..908a79bdc87 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/job-contract/tab-pension.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/contact-summary'); +var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).openTab('job-contract') +module.exports = function (engine) { + page.init(engine).openTab('job-contract') .then(function (tab) { return tab.openNewContractModal(); }) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js new file mode 100644 index 00000000000..603af011d6f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.showAddNew(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js new file mode 100644 index 00000000000..89dc94b870d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Basic Details').edit(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js new file mode 100644 index 00000000000..158686d060e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js new file mode 100644 index 00000000000..6b2d0df72ee --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Cost Centres').edit(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js new file mode 100644 index 00000000000..3cdc7419c8a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Cost Centres'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js new file mode 100644 index 00000000000..2054a95e913 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.attemptDelete(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js new file mode 100644 index 00000000000..9ae694b5543 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Funding').edit(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js new file mode 100644 index 00000000000..7b545369169 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Funding'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js new file mode 100644 index 00000000000..0ce0afad5d7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).openTab('job-roles') + .then(function (tab) { + tab.switchToTab('Basic Details').edit().openDropdown('department'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js new file mode 100644 index 00000000000..a096bd1298c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine).showActions(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js similarity index 51% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js index b8358ffa5dc..228694b7341 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/contact-summary/show-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js @@ -2,6 +2,6 @@ var page = require('../../../page-objects/contact-summary'); -module.exports = function (chromy) { - page.init(chromy).showActions(); +module.exports = function (engine) { + page.init(engine).openTab('tasks'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js new file mode 100644 index 00000000000..b122224beb7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine).advancedFilters(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js new file mode 100644 index 00000000000..0985de92e71 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine).addDocument(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js new file mode 100644 index 00000000000..5ac08b6e301 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine).addDocument().then(function (modal) { + modal.showTab('Assignments').pickDueDate(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js new file mode 100644 index 00000000000..d6d5c0a07bc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine).addDocument().then(function (modal) { + modal.showTab('Assignments').showField('Assignee').selectAssignee(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js new file mode 100644 index 00000000000..4ae4812a932 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine).addDocument().then(function (modal) { + modal.selectType(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js new file mode 100644 index 00000000000..5ceb8d16858 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine).addDocument().then(function (modal) { + modal.showTab('Assignments').showField('Assignee').showField('Assignment'); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js new file mode 100644 index 00000000000..ea246afb99b --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-import'); + +module.exports = function (engine) { + page.init(engine).showStep2(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js new file mode 100644 index 00000000000..9bc2b5d6530 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-import'); + +module.exports = function (engine) { + page.init(engine).showStep3(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js new file mode 100644 index 00000000000..e0ab2190493 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-import'); + +module.exports = function (engine) { + page.init(engine).showStep4(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js new file mode 100644 index 00000000000..6f85282fab4 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-dashboard'); + +module.exports = function (engine) { + page.init(engine).openTab('leave-balances'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js new file mode 100644 index 00000000000..ce1350ec778 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-dashboard'); + +module.exports = function (engine) { + page.init(engine).openTab('leave-calendar'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js new file mode 100644 index 00000000000..2b96394e449 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js @@ -0,0 +1,10 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-dashboard'); + +module.exports = function (engine) { + page.init(engine).openTab('leave-requests') + .then(function (requestTab) { + requestTab.showFilters(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js new file mode 100644 index 00000000000..bf621be0763 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/leave-absence-dashboard'); + +module.exports = function (engine) { + page.init(engine).openTab('leave-requests'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/loadCookies.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js index 356894575e6..55914dfe650 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js @@ -1,4 +1,9 @@ -module.exports = function (engine, scenario, vp) { - // This script runs before your app loads. Edit here to log-in, load cookies or set other states required for your test. - console.log('onBefore.js has run for ' + vp.label + '.'); +module.exports = function (chromy, scenario, vp) { + console.log('--------------------------------------------'); + console.log('Running Scenario "' + scenario.label + '" ' + scenario.count); + + require('./loadCookies')(chromy, scenario); + + // IGNORE ANY CERT WARNINGS + chromy.ignoreCertificateErrors(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js index 78b5856938e..758a10cb201 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js @@ -1,6 +1,7 @@ -module.exports = function (engine, scenario, vp) { - engine.evaluate(function () { - // Your web-app is now loaded. Edit here to simulate user interactions or other state changes in the browser window context. - }); - console.log('onReady.js has run for: ', vp.label); +var page = require('../../page-objects/contact-summary'); + +module.exports = function (chromy, scenario, vp) { + require('./clickAndHoverHelper')(chromy, scenario); + + page.init(chromy); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js new file mode 100644 index 00000000000..793f1ad0f5e --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/onboarding-wizard'); + +module.exports = function (engine) { + page.init(engine).reachAddressPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js new file mode 100644 index 00000000000..4ee448d0a18 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/onboarding-wizard'); + +module.exports = function (engine) { + page.init(engine).reachContactInfoPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js new file mode 100644 index 00000000000..a8cca5cbe65 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/onboarding-wizard'); + +module.exports = function (engine) { + page.init(engine).reachDependentPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js new file mode 100644 index 00000000000..01ff7856436 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/onboarding-wizard'); + +module.exports = function (engine) { + page.init(engine).reachEmergencyContactPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js new file mode 100644 index 00000000000..2d1956636ec --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/onboarding-wizard'); + +module.exports = function (engine) { + page.init(engine).reachPayrollPage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js new file mode 100644 index 00000000000..23c2099cfd2 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/onboarding-wizard'); + +module.exports = function (engine) { + page.init(engine).reachProfilePicturePage(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js new file mode 100644 index 00000000000..684a7d934a6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of Admin +// and have at least one leave request *assigned* to the Admin +module.exports = function (engine) { + page.init(engine).changeFilterByAssignee('all'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests.js new file mode 100644 index 00000000000..563d7c02cbc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of Admin +// and have at least one leave request *assigned* to the Admin +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-balances.js new file mode 100644 index 00000000000..becd944302c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-balances.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js similarity index 55% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js index ef7e58506ea..60efd698c6e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one sickness request -module.exports = function (chromy) { - page.init(chromy) +module.exports = function (engine) { + page.init(engine) .openLeaveTypeFor(3) .openActionsForRow(1) .editRequest(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js similarity index 54% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js index fadeca15ee3..3c18c0e76b3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../../page-objects/ssp-leave-absences-manager-leave-requests'); +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one toil request -module.exports = function (chromy) { - page.init(chromy) +module.exports = function (engine) { + page.init(engine) .openLeaveTypeFor(2) .openActionsForRow(1) .editRequest(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js new file mode 100644 index 00000000000..cd8f1cb5f01 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager +module.exports = function (engine) { + page.init(engine).applyLeaveForStaff('leave'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js new file mode 100644 index 00000000000..e366ce996e7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one leave request +module.exports = function (engine) { + page.init(engine).openActionsForRow(1); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js new file mode 100644 index 00000000000..f8ad47f8324 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one leave request +module.exports = function (engine) { + page.init(engine).expandFilter(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js new file mode 100644 index 00000000000..4cffb2c47cb --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager and have at least one leave request +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js new file mode 100644 index 00000000000..733f99d5646 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +module.exports = function (engine) { + page.init(engine).toggleContactsWithLeaves(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js new file mode 100644 index 00000000000..de197d73b10 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js new file mode 100644 index 00000000000..5f4fa95827c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); + +module.exports = function (engine) { + page.init(engine).toggleLegend(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js new file mode 100644 index 00000000000..73f2ee507f9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager +module.exports = function (engine) { + page.init(engine).applyLeaveForStaff('sickness'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js new file mode 100644 index 00000000000..251357fb8ae --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); + +// precondition: need to have the login of manager +module.exports = function (engine) { + page.init(engine).applyLeaveForStaff('toil'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js new file mode 100644 index 00000000000..2fd312ed915 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js new file mode 100644 index 00000000000..e19461e68fc --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); + +module.exports = function (engine) { + page.init(engine).showTooltip(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js similarity index 72% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js index 78ee0d3b586..8b0ab4fee19 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); +var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have a current absence period -module.exports = function (chromy) { - page.init(chromy) +module.exports = function (engine) { + page.init(engine) .newRequest('leave') .selectRequestAbsenceType('Holiday in Hours') .changeRequestDaysMode('multiple') diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js similarity index 68% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js index f6382708821..341d64c27e1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); +var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have a current absence period -module.exports = function (chromy) { - page.init(chromy) +module.exports = function (engine) { + page.init(engine) .newRequest('leave') .selectRequestAbsenceType('Holiday in Hours') .changeRequestDaysMode('multiple') diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js similarity index 64% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js index 3f304983f1d..63c7e805a8b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-pending-show-comments.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); +var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have the first leave request on the pending list with at least a comment -module.exports = function (chromy) { - page.init(chromy) +module.exports = function (engine) { + page.init(engine) .openSection('pending') .openActionsForRow() .editRequest().then(function (modal) { diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js similarity index 56% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js index 8f2948576dc..22e506f78d6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/ssp-leave-absences/staff/my-report-show-absence-in-hours.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../../page-objects/ssp-leave-absences-my-leave-report'); +var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have the absence type in *hours* with a label "Holiday in Hours" -module.exports = function (chromy) { - page.init(chromy) +module.exports = function (engine) { + page.init(engine) .newRequest('leave') .selectRequestAbsenceType('Holiday in Hours'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report.js new file mode 100644 index 00000000000..29a1740216f --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report.js @@ -0,0 +1,8 @@ +'use strict'; + +var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); + +// precondition: need to have at least one pending leave request +module.exports = function (engine) { + page.init(engine).openSection('pending'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js new file mode 100644 index 00000000000..c14b199cd26 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp/my-details'); + +module.exports = function (engine) { + page.init(engine).showEditMyDetailsPopup(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js new file mode 100644 index 00000000000..6815777778d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp/hr-resources'); + +module.exports = function (engine) { + page.init(engine).seeResources(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js new file mode 100644 index 00000000000..c080ce404cf --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp/tasks'); + +module.exports = function (engine) { + page.init(engine).openCreateNewTaskModal(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js new file mode 100644 index 00000000000..634cd0b61bd --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp/tasks'); + +module.exports = function (engine) { + page.init(engine).openCompletedTasksModal(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js new file mode 100644 index 00000000000..35d49dcf20d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp/vacancies'); + +module.exports = function (engine) { + page.init(engine).showMoreDetails(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js new file mode 100644 index 00000000000..28fe080c517 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).advancedFilters(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js new file mode 100644 index 00000000000..118bb28127c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addAssignment().then(function (modal) { + modal.selectType().addDocument(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js new file mode 100644 index 00000000000..b6599b718c1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addAssignment().then(function (modal) { + modal.selectType().addTask(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js new file mode 100644 index 00000000000..60a4aa34796 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addAssignment(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js new file mode 100644 index 00000000000..65c152f58d9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addAssignment().then(function (modal) { + modal.pickDate(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js new file mode 100644 index 00000000000..b3ca42ea3a6 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addAssignment().then(function (modal) { + modal.selectType(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js new file mode 100644 index 00000000000..006c967cb9d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).selectDates(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js new file mode 100644 index 00000000000..01b14c8051c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).taskActions(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js new file mode 100644 index 00000000000..2ffc6c62991 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addTask(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js new file mode 100644 index 00000000000..721c9b42364 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).inPlaceEdit('assigned'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js new file mode 100644 index 00000000000..638a1fdd4cf --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).inPlaceEdit('date'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js new file mode 100644 index 00000000000..bbddec126b9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).inPlaceEdit('subject'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js new file mode 100644 index 00000000000..aedc0dd59ac --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).inPlaceEdit('target'); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js new file mode 100644 index 00000000000..28650b46251 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).openTask(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js new file mode 100644 index 00000000000..d9bdcdbf7fe --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addTask().then(function (modal) { + modal.pickDate(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js new file mode 100644 index 00000000000..03b246d5d9c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addTask().then(function (modal) { + modal.showField('Assignee').selectAssignee(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js new file mode 100644 index 00000000000..78be3f9b4e0 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js @@ -0,0 +1,9 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).addTask().then(function (modal) { + modal.selectType(); + }); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js similarity index 51% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js index 4ee87e4a290..7dfe5feaf15 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/chromy/tasks/task/show-all-fields.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../../page-objects/tasks'); +var page = require('../../../page-objects/tasks'); -module.exports = function (chromy) { - page.init(chromy).addTask().then(function (modal) { +module.exports = function (engine) { + page.init(engine).addTask().then(function (modal) { modal .showField('Subject') .showField('Assignee') diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js new file mode 100644 index 00000000000..5e445f91122 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine).showMore(); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js new file mode 100644 index 00000000000..c311203bdf4 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../../page-objects/tasks'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js new file mode 100644 index 00000000000..9d5643ea16a --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/work-patterns-form'); + +module.exports = function (engine) { + page.init(engine).showCalendarForm(); +}; From 37fbb7a80e754340cf1fcad9f104127ac64e4a37 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 21 Mar 2018 16:52:50 +0100 Subject: [PATCH 051/251] PCHR-3221: Minor fixes to engine scripts --- .../engine_scripts/contact-summary/absence/tab-calendar.js | 4 ++-- .../contact-summary/absence/tab-entitlements.js | 4 ++-- .../contact-summary/absence/tab-report-actions.js | 4 ++-- .../contact-summary/absence/tab-report-open-section.js | 4 ++-- .../engine_scripts/contact-summary/absence/tab-report.js | 4 ++-- .../contact-summary/absence/tab-work-patterns-modal.js | 4 ++-- .../contact-summary/absence/tab-work-patterns.js | 4 ++-- .../backstop_data/engine_scripts/onReady.js | 2 +- ...all-contacts.js => manager-leave-calendar-all-contacts.js} | 0 ...ble.js => manager-leave-calendar-current-month-visible.js} | 0 ...-expanded.js => manager-leave-calendar-legend-expanded.js} | 0 ...leave-calendar_tooltip.js => my-leave-calendar-tooltip.js} | 0 12 files changed, 15 insertions(+), 15 deletions(-) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/{manager-leave-calendar_all-contacts.js => manager-leave-calendar-all-contacts.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/{manager-leave-calendar_current-month-visible.js => manager-leave-calendar-current-month-visible.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/{manager-leave-calendar_legend-expanded.js => manager-leave-calendar-legend-expanded.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/{my-leave-calendar_tooltip.js => my-leave-calendar-tooltip.js} (100%) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js index 9ad73715e45..fe78ce012ba 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js @@ -1,7 +1,7 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('calendar'); + page.init(engine).openSubTab('calendar'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js index 926c3f13cf7..d8d9ce0a9f1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js @@ -1,7 +1,7 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('entitlements'); + page.init(engine).openSubTab('entitlements'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js index 3931acdb5b6..647fc8194cf 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js @@ -1,9 +1,9 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('report') + page.init(engine).openSubTab('report') .then(function (reportTab) { reportTab.openSection('pending').showActions(); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js index d8f01fedf3d..afa21d405df 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js @@ -1,9 +1,9 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('report') + page.init(engine).openSubTab('report') .then(function (reportTab) { reportTab.openSection('pending'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js index e781a15e0af..5adfe26c545 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js @@ -1,7 +1,7 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('report'); + page.init(engine).openSubTab('report'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js index 65cb0566231..f36ae0178a6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js @@ -1,9 +1,9 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('work-patterns') + page.init(engine).openSubTab('work-patterns') .then(function (workPatternsTab) { workPatternsTab.showModal(); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js index 0e91f21a02f..c34d943bbc1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js @@ -1,7 +1,7 @@ 'use strict'; -var absenceTab = require('../../../page-objects/tabs/absence'); +var page = require('../../../page-objects/tabs/absence'); module.exports = function (engine) { - absenceTab.init(engine).openSubTab('work-patterns'); + page.init(engine).openSubTab('work-patterns'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js index 758a10cb201..ad9647e3127 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js @@ -1,4 +1,4 @@ -var page = require('../../page-objects/contact-summary'); +var page = require('../page-objects/page'); module.exports = function (chromy, scenario, vp) { require('./clickAndHoverHelper')(chromy, scenario); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-tooltip.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_tooltip.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-tooltip.js From 95268308589d3aad0bae09808b7c55461a2a6772 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 21 Mar 2018 17:10:42 +0100 Subject: [PATCH 052/251] PCHR-3221: Remove IIFEs in page objects files --- .../page-objects/contact-summary.js | 95 +++-- .../backstop_data/page-objects/documents.js | 119 ++++--- .../page-objects/leave-absence-dashboard.js | 39 +-- .../page-objects/leave-absence-import.js | 118 ++++--- .../page-objects/modals/assignment.js | 108 +++--- .../modals/contact-access-rights.js | 29 +- .../page-objects/modals/document.js | 125 ++++--- .../page-objects/modals/job-contract.js | 33 +- .../page-objects/modals/modal.js | 8 +- .../page-objects/modals/ssp-leave-request.js | 25 +- .../backstop_data/page-objects/modals/task.js | 101 +++--- .../page-objects/onboarding-wizard.js | 134 ++++---- .../backstop_data/page-objects/page.js | 65 ++-- ...e-absences-manager-leave-balance-report.js | 18 +- ...p-leave-absences-manager-leave-calendar.js | 56 ++- ...p-leave-absences-manager-leave-requests.js | 216 ++++++------ .../ssp-leave-absences-my-leave-calendar.js | 132 ++++--- .../ssp-leave-absences-my-leave-report.js | 325 +++++++++--------- .../page-objects/ssp/hr-resources.js | 27 +- .../page-objects/ssp/my-details.js | 27 +- .../backstop_data/page-objects/ssp/tasks.js | 45 ++- .../page-objects/ssp/vacancies.js | 27 +- .../page-objects/tabs/documents.js | 38 +- .../page-objects/tabs/job-contract.js | 124 ++++--- .../page-objects/tabs/job-roles.js | 118 ++++--- .../page-objects/tabs/leave-balances.js | 12 +- .../page-objects/tabs/leave-calendar.js | 12 +- .../page-objects/tabs/leave-requests.js | 24 +- .../backstop_data/page-objects/tabs/tab.js | 21 +- .../backstop_data/page-objects/tabs/tasks.js | 10 +- .../backstop_data/page-objects/tasks.js | 235 +++++++------ .../page-objects/work-patterns-form.js | 36 +- 32 files changed, 1212 insertions(+), 1290 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index 8feafca270c..cffbc225112 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -1,52 +1,49 @@ var Promise = require('es6-promise').Promise; var page = require('./page'); -module.exports = (function () { - return page.extend({ - - /** - * Opens the "contact access rights" modal - * - * @return {Promise} resolves with the modal page object - */ - openManageRightsModal: function () { - var chromy = this.chromy; - - return new Promise(function (resolve) { - this.showActions(); - - chromy.click('[data-contact-access-rights]'); - chromy.wait(function () { - var dom = document.querySelector('.spinner'); - - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - resolve(this.waitForModal('contact-access-rights')); - }.bind(this)); - }, - - /** - * Opens one of the contact summary tabs - * - * @param {string} tabId - * @return {object} resolves with the tab page object - */ - openTab: function (tabId) { - return new Promise(function (resolve) { - var tab = require('./tabs/' + tabId); - this.chromy.click('[title="' + tab.tabTitle + '"]'); - - resolve(tab.init(this.chromy, false)); - }.bind(this)); - }, - - /** - * Shows the dropdown of the "Actions" button in the contact summary page - */ - showActions: function () { - this.chromy.click('#crm-contact-actions-link'); - this.chromy.wait('#crm-contact-actions-list'); - } - }); -})(); +module.exports = page.extend({ + /** + * Opens the "contact access rights" modal + * + * @return {Promise} resolves with the modal page object + */ + openManageRightsModal: function () { + var chromy = this.chromy; + + return new Promise(function (resolve) { + this.showActions(); + + chromy.click('[data-contact-access-rights]'); + chromy.wait(function () { + var dom = document.querySelector('.spinner'); + + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + + resolve(this.waitForModal('contact-access-rights')); + }.bind(this)); + }, + + /** + * Opens one of the contact summary tabs + * + * @param {string} tabId + * @return {object} resolves with the tab page object + */ + openTab: function (tabId) { + return new Promise(function (resolve) { + var tab = require('./tabs/' + tabId); + this.chromy.click('[title="' + tab.tabTitle + '"]'); + + resolve(tab.init(this.chromy, false)); + }.bind(this)); + }, + + /** + * Shows the dropdown of the "Actions" button in the contact summary page + */ + showActions: function () { + this.chromy.click('#crm-contact-actions-link'); + this.chromy.wait('#crm-contact-actions-list'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js index 2309ec18a38..ee14f91b3fc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js @@ -1,73 +1,70 @@ var Promise = require('es6-promise').Promise; var page = require('./page'); -module.exports = (function () { - var documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; +var documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; - return page.extend({ +module.exports = page.extend({ + /** + * Opens the modal to add a documents + * + * @return {Promise} resolves with the document modal page object + */ + addDocument: function () { + return new Promise(function (resolve) { + this.chromy.click('a[ng-click*="itemAdd"]'); + resolve(this.waitForModal('document')); + }.bind(this)); + }, - /** - * Opens the modal to add a documents - * - * @return {Promise} resolves with the document modal page object - */ - addDocument: function () { - return new Promise(function (resolve) { - this.chromy.click('a[ng-click*="itemAdd"]'); - resolve(this.waitForModal('document')); - }.bind(this)); - }, + /** + * Shows the advanced filters + * + * @return {object} + */ + advancedFilters: function () { + this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); + this.chromy.wait(500); - /** - * Shows the advanced filters - * - * @return {object} - */ - advancedFilters: function () { - this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - this.chromy.wait(500); + return this; + }, - return this; - }, + /** + * Shows the dropdown of the actions available on any given document + * + * @return {object} + */ + documentActions: function () { + this.chromy.click(documentSelector + ' .ct-context-menu-toggle'); - /** - * Shows the dropdown of the actions available on any given document - * - * @return {object} - */ - documentActions: function () { - this.chromy.click(documentSelector + ' .ct-context-menu-toggle'); + return this; + }, - return this; - }, + /** + * Opens a document + * + * @return {Promise} resolves with the document modal page object + */ + openDocument: function () { + return new Promise(function (resolve) { + this.documentActions(); - /** - * Opens a document - * - * @return {Promise} resolves with the document modal page object - */ - openDocument: function () { - return new Promise(function (resolve) { - this.documentActions(); + this.chromy.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); + resolve(this.waitForModal('document')); + }.bind(this)); + }, - this.chromy.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); - resolve(this.waitForModal('document')); - }.bind(this)); - }, + /** + * Shows the "select dates" filter + */ + selectDates: function () { + this.chromy.click('.ct-select-dates'); + this.chromy.wait(500); + }, - /** - * Shows the "select dates" filter - */ - selectDates: function () { - this.chromy.click('.ct-select-dates'); - this.chromy.wait(500); - }, - - /** - * Waits until the specified select is visible on the page - */ - waitForReady: function () { - this.chromy.waitUntilVisible('.ct-filter-date'); - } - }); -})(); + /** + * Waits until the specified select is visible on the page + */ + waitForReady: function () { + this.chromy.waitUntilVisible('.ct-filter-date'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js index 6a8999e5942..c5e2a9c21f3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js @@ -1,26 +1,23 @@ var Promise = require('es6-promise').Promise; var page = require('./page'); -module.exports = (function () { - return page.extend({ +module.exports = page.extend({ + /** + * Opens one of the leave absence dashboard tabs + * + * @param {string} tabId + * @return {object} resolves with the tab page object + */ + openTab: function (tabId) { + var chromy = this.chromy; + var tab = require('./tabs/' + tabId).init(chromy, false); - /** - * Opens one of the leave absence dashboard tabs - * - * @param {string} tabId - * @return {object} resolves with the tab page object - */ - openTab: function (tabId) { - var chromy = this.chromy; - var tab = require('./tabs/' + tabId).init(chromy, false); + return new Promise(function (resolve) { + chromy.click('[ui-sref="' + tab.tabUiSref + '"]'); + chromy.waitUntilVisible(tab.readySelector); + chromy.wait(500); - return new Promise(function (resolve) { - chromy.click('[ui-sref="' + tab.tabUiSref + '"]'); - chromy.waitUntilVisible(tab.readySelector); - chromy.wait(500); - - resolve(tab); - }); - } - }); -})(); + resolve(tab); + }); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js index 38dc3b285b7..43a330a25fc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js @@ -1,63 +1,61 @@ var path = require('path'); var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Displays L&A Import Form Step 2 by uploading a sample import file and - * clicking on next. - * - * @return Page instance. - */ - showStep2: function () { - var filePath = path.join(__dirname, '..', 'uploads/leave-and-absences-import-data.csv'); - - this.chromy.setFile('input[name="uploadFile"]', filePath); - this.chromy.check('#skipColumnHeader'); - this.submitAndWait(); - - return this; - }, - - /** - * Displays L&A Import Form Step 3 by displaying step 2 and then clicking - * on next. - * - * @return Page instance. - */ - showStep3: function () { - this.showStep2(); - this.submitAndWait(); - - return this; - }, - - /** - * Displays L&A Import Form Step 4 by displaying step 3 and then clicking - * on next. - * - * @return page instance. - */ - showStep4: function () { - this.showStep3(); - this.submitAndWait(); - - return this; - }, - - /** - * Clicks on next button (.validate) and waits for Step URL. - */ - submitAndWait: function () { - this.chromy.click('.crm-leave-and-balance-import .validate'); - this.chromy.waitLoadEvent(); - }, - - /** - * Waits until the import form is visible. - */ - waitForReady: function () { - this.chromy.wait('.crm-leave-and-balance-import'); - } - }); -})(); +module.exports = page.extend({ + /** + * Displays L&A Import Form Step 2 by uploading a sample import file and + * clicking on next. + * + * @return Page instance. + */ + showStep2: function () { + var filePath = path.join(__dirname, '..', 'uploads/leave-and-absences-import-data.csv'); + + this.chromy.setFile('input[name="uploadFile"]', filePath); + this.chromy.check('#skipColumnHeader'); + this.submitAndWait(); + + return this; + }, + + /** + * Displays L&A Import Form Step 3 by displaying step 2 and then clicking + * on next. + * + * @return Page instance. + */ + showStep3: function () { + this.showStep2(); + this.submitAndWait(); + + return this; + }, + + /** + * Displays L&A Import Form Step 4 by displaying step 3 and then clicking + * on next. + * + * @return page instance. + */ + showStep4: function () { + this.showStep3(); + this.submitAndWait(); + + return this; + }, + + /** + * Clicks on next button (.validate) and waits for Step URL. + */ + submitAndWait: function () { + this.chromy.click('.crm-leave-and-balance-import .validate'); + this.chromy.waitLoadEvent(); + }, + + /** + * Waits until the import form is visible. + */ + waitForReady: function () { + this.chromy.wait('.crm-leave-and-balance-import'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js index 00f25ef8c8f..53bbe3387b4 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js @@ -2,58 +2,56 @@ var modal = require('./modal'); -module.exports = (function () { - return modal.extend({ - - /** - * Clicks the "add document" button - * - * @return {object} - */ - addDocument: function () { - this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); - - return this; - }, - - /** - * Clicks the "add task" button - * - * @return {object} - */ - addTask: function () { - this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); - - return this; - }, - - /** - * Opens a date picker - * - * @return {object} - */ - pickDate: function () { - this.chromy.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); - this.chromy.waitUntilVisible('.uib-datepicker-popup'); - - return this; - }, - - /** - * Selects an assignment type, so that the rest of the modal is shown - * - * @return {object} - */ - selectType: function () { - this.chromy.evaluate(function (modalRoot) { - var select = document.querySelector(modalRoot + ' select[name="assignment"]'); - - select.selectedIndex = 2; - jQuery(select).change(); - }, [this.modalRoot]); - this.chromy.wait(500); - - return this; - } - }); -})(); +module.exports = modal.extend({ + + /** + * Clicks the "add document" button + * + * @return {object} + */ + addDocument: function () { + this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); + + return this; + }, + + /** + * Clicks the "add task" button + * + * @return {object} + */ + addTask: function () { + this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); + + return this; + }, + + /** + * Opens a date picker + * + * @return {object} + */ + pickDate: function () { + this.chromy.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); + this.chromy.waitUntilVisible('.uib-datepicker-popup'); + + return this; + }, + + /** + * Selects an assignment type, so that the rest of the modal is shown + * + * @return {object} + */ + selectType: function () { + this.chromy.evaluate(function (modalRoot) { + var select = document.querySelector(modalRoot + ' select[name="assignment"]'); + + select.selectedIndex = 2; + jQuery(select).change(); + }, [this.modalRoot]); + this.chromy.wait(500); + + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js index 02e31eb5343..da61b5a71cd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js @@ -1,20 +1,17 @@ var modal = require('./modal'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Opens a ui-select dropdown + * + * @return {object} + */ + openDropdown: function (name) { + var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; - /** - * Opens a ui-select dropdown - * - * @return {object} - */ - openDropdown: function (name) { - var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; + this.chromy.click(common.replace('%{name}', name)); + this.chromy.wait(100); - this.chromy.click(common.replace('%{name}', name)); - this.chromy.wait(100); - - return this; - } - }); -})(); + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js index 1c1e5b5a626..0db0f98c122 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js @@ -1,66 +1,63 @@ var modal = require('./modal'); -module.exports = (function () { - return modal.extend({ - - /** - * Opens the "due date" datepicker - * - * @return {object} - */ - pickDueDate: function () { - this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); - this.chromy.waitUntilVisible('.uib-datepicker-popup'); - - return this; - }, - - /** - * Shows the given field - * - * @param {string} fieldName - * @return {object} - */ - showField: function (fieldName) { - this.chromy.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); - - return this; - }, - - /** - * Selects an assignee for the document - * - * @return {object} - */ - selectAssignee: function () { - this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; - }, - - /** - * Selects the type of document - * - * @return {object} - */ - selectType: function () { - this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; - }, - - /** - * Opens the given tab - * - * @return {object} - */ - showTab: function (tabName) { - this.chromy.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); - this.chromy.wait(200); - - return this; - } - }); -})(); +module.exports = modal.extend({ + /** + * Opens the "due date" datepicker + * + * @return {object} + */ + pickDueDate: function () { + this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); + this.chromy.waitUntilVisible('.uib-datepicker-popup'); + + return this; + }, + + /** + * Shows the given field + * + * @param {string} fieldName + * @return {object} + */ + showField: function (fieldName) { + this.chromy.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); + + return this; + }, + + /** + * Selects an assignee for the document + * + * @return {object} + */ + selectAssignee: function () { + this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); + + return this; + }, + + /** + * Selects the type of document + * + * @return {object} + */ + selectType: function () { + this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); + + return this; + }, + + /** + * Opens the given tab + * + * @return {object} + */ + showTab: function (tabName) { + this.chromy.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); + this.chromy.wait(200); + + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js index 2747df16ca2..22f77825a20 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js @@ -2,22 +2,19 @@ var modal = require('./modal'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Selects the tab with the given title + * + * @param {string} tabTitle + */ + selectTab: function (tabTitle) { + this.chromy.evaluate(function (tabTitle) { + // = clickLabel + var xPath = './/a[text()="' + tabTitle + '"]'; + var link = document.evaluate(xPath, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - /** - * Selects the tab with the given title - * - * @param {string} tabTitle - */ - selectTab: function (tabTitle) { - this.chromy.evaluate(function (tabTitle) { - // = clickLabel - var xPath = './/a[text()="' + tabTitle + '"]'; - var link = document.evaluate(xPath, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - link.click(); - }, [tabTitle]); - } - }); -})(); + link.click(); + }, [tabTitle]); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js index ed84367f9a7..78a2f93d14c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js @@ -1,7 +1,5 @@ var page = require('../page'); -module.exports = (function () { - return page.extend({ - modalRoot: '.modal' - }); -})(); +module.exports = page.extend({ + modalRoot: '.modal' +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js index fea763c9f5e..c178799d204 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js @@ -1,17 +1,14 @@ var modal = require('./modal'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Selects tabs like comments or attachments + * @param {String} tabName like comments or attachments + * @return {Object} this object + */ + selectTab: function (tabName) { + this.chromy.click('div.chr_leave-request-modal__tab li[heading=\'' + tabName + '\'] a'); - /** - * Selects tabs like comments or attachments - * @param {String} tabName like comments or attachments - * @return {Object} this object - */ - selectTab: function (tabName) { - this.chromy.click('div.chr_leave-request-modal__tab li[heading=\'' + tabName + '\'] a'); - - return this; - } - }); -})(); + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js index e5355c8becb..0ab85339afe 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js @@ -1,54 +1,51 @@ var modal = require('./modal'); -module.exports = (function () { - return modal.extend({ - - /** - * Opens a date picker - * - * @return {object} - */ - pickDate: function () { - this.chromy.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); - this.chromy.waitUntilVisible('.uib-datepicker-popup'); - - return this; - }, - - /** - * Shows a given field - * - * @param {string} fieldName - * @return {object} - */ - showField: function (fieldName) { - this.chromy.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); - - return this; - }, - - /** - * Selects the task's assignee - * - * @return {object} - */ - selectAssignee: function () { - this.chromy.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; - }, - - /** - * Select the task type - * - * @return {object} - */ - selectType: function () { - this.chromy.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; - } - }); -})(); +module.exports = modal.extend({ + /** + * Opens a date picker + * + * @return {object} + */ + pickDate: function () { + this.chromy.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); + this.chromy.waitUntilVisible('.uib-datepicker-popup'); + + return this; + }, + + /** + * Shows a given field + * + * @param {string} fieldName + * @return {object} + */ + showField: function (fieldName) { + this.chromy.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); + + return this; + }, + + /** + * Selects the task's assignee + * + * @return {object} + */ + selectAssignee: function () { + this.chromy.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); + + return this; + }, + + /** + * Select the task type + * + * @return {object} + */ + selectType: function () { + this.chromy.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); + this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); + + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js index 45c1667f331..62e96419db1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js @@ -1,75 +1,73 @@ var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Navigate to Address Page - * - * @return {*} - */ - reachAddressPage: function () { - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Address"]'); - }, +module.exports = page.extend({ + /** + * Navigate to Address Page + * + * @return {*} + */ + reachAddressPage: function () { + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Address"]'); + }, - /** - * Navigate to Contact Info Page - * - * @return {*} - */ - reachContactInfoPage: function () { - this.reachAddressPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Contact Info"]'); - }, + /** + * Navigate to Contact Info Page + * + * @return {*} + */ + reachContactInfoPage: function () { + this.reachAddressPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Contact Info"]'); + }, - /** - * Navigate to Payroll Page - * - * @return {*} - */ - reachPayrollPage: function () { - this.reachContactInfoPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Payroll"]'); - }, + /** + * Navigate to Payroll Page + * + * @return {*} + */ + reachPayrollPage: function () { + this.reachContactInfoPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Payroll"]'); + }, - /** - * Navigate to Emergency Contact Page - * - * @return {*} - */ - reachEmergencyContactPage: function () { - this.reachPayrollPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Emergency Contact"]'); - }, + /** + * Navigate to Emergency Contact Page + * + * @return {*} + */ + reachEmergencyContactPage: function () { + this.reachPayrollPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Emergency Contact"]'); + }, - /** - * Navigate to Dependent Page - * - * @return {*} - */ - reachDependentPage: function () { - this.reachEmergencyContactPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Dependants"]'); - this.chromy.click('#edit-submitted-do-you-have-dependants-1'); - }, + /** + * Navigate to Dependent Page + * + * @return {*} + */ + reachDependentPage: function () { + this.reachEmergencyContactPage(); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Dependants"]'); + this.chromy.click('#edit-submitted-do-you-have-dependants-1'); + }, - /** - * Navigate to Profile Picture Page - * - * @return {*} - */ - reachProfilePicturePage: function () { - this.reachDependentPage(); - this.chromy.waitUntilVisible('.webform-component-fieldset'); - this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); - this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001', '1234'); - this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010', 'sibling'); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Profile Picture"]'); - } - }); -})(); + /** + * Navigate to Profile Picture Page + * + * @return {*} + */ + reachProfilePicturePage: function () { + this.reachDependentPage(); + this.chromy.waitUntilVisible('.webform-component-fieldset'); + this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); + this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001', '1234'); + this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010', 'sibling'); + this.chromy.click('.webform-next'); + this.chromy.wait('input[value="Profile Picture"]'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index 3bae746ff24..8c813bb9649 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -1,40 +1,7 @@ var _ = require('lodash'); var Promise = require('es6-promise').Promise; -/** - * Closes any modal currently open - * - * @return {Object} - */ -function closeAnyModal () { - var openModalSelector = '.modal.in'; - - if (this.chromy.exists(openModalSelector)) { - this.chromy.click(openModalSelector + ' .close[ng-click="cancel()"]'); - this.chromy.wait(300); - } - - return this; -} - -/** - * Closes any notification currently open - * - * @return {Object} - */ -function closeNotifications () { - var notificationSelector = 'a.ui-notify-cross.ui-notify-close'; - - if (this.chromy.exists(notificationSelector)) { - this.chromy.click(notificationSelector); - this.chromy.wait(500); - } - - return this; -} - module.exports = { - /** * Initializes the page and removes any code warnings from the page * @@ -109,3 +76,35 @@ module.exports = { }); } }; + +/** + * Closes any modal currently open + * + * @return {Object} + */ +function closeAnyModal () { + var openModalSelector = '.modal.in'; + + if (this.chromy.exists(openModalSelector)) { + this.chromy.click(openModalSelector + ' .close[ng-click="cancel()"]'); + this.chromy.wait(300); + } + + return this; +} + +/** + * Closes any notification currently open + * + * @return {Object} + */ +function closeNotifications () { + var notificationSelector = 'a.ui-notify-cross.ui-notify-close'; + + if (this.chromy.exists(notificationSelector)) { + this.chromy.click(notificationSelector); + this.chromy.wait(500); + } + + return this; +} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js index fa43b3c6501..00a0045d60d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js @@ -1,12 +1,10 @@ var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Wait for the page to be ready - */ - waitForReady: function () { - this.chromy.waitUntilVisible('.chr_leave-balance-tab'); - } - }); -})(); +module.exports = page.extend({ + /** + * Wait for the page to be ready + */ + waitForReady: function () { + this.chromy.waitUntilVisible('.chr_leave-balance-tab'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js index c6c0de26c69..d6cf60366a7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js @@ -1,35 +1,33 @@ var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Wait for the page to be ready by looking at - * the visibility of a leave calendar item element - */ - waitForReady: function () { - this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); - }, +module.exports = page.extend({ + /** + * Wait for the page to be ready by looking at + * the visibility of a leave calendar item element + */ + waitForReady: function () { + this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); + }, - /** - * Toggle the calendar legend - * - * @return {Promise} - */ - toggleLegend: function () { - this.chromy.click('.chr_leave-calendar__legend__title'); + /** + * Toggle the calendar legend + * + * @return {Promise} + */ + toggleLegend: function () { + this.chromy.click('.chr_leave-calendar__legend__title'); - return this; - }, + return this; + }, - /** - * Toggle contacts with leaves - * - * @return {Promise} - */ - toggleContactsWithLeaves: function () { - this.chromy.click('.chr_leave-calendar__toggle-contacts-with-leaves'); + /** + * Toggle contacts with leaves + * + * @return {Promise} + */ + toggleContactsWithLeaves: function () { + this.chromy.click('.chr_leave-calendar__toggle-contacts-with-leaves'); - return this; - } - }); -})(); + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js index bc7bd57f8b7..5217a6113ee 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js @@ -2,112 +2,110 @@ var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Wait for the page to be ready as it waits for the actions of the first - * row of leave requests to be visible - * - * @return {Object} this object - */ - waitForReady: function () { - this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); - }, - - /** - * Change the filter by Assignee - * - * @param {String} type (me|unassigned|all) - * @return {Object} this object - */ - changeFilterByAssignee: function (type) { - var filters = ['me', 'unassigned', 'all']; - - this.chromy.click( - '.chr_manage_leave_requests__assignee_filter button:nth-of-type(' + - (filters.indexOf(type) + 1) + - ')'); - this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); - - return this; - }, - - /** - * Opens the dropdown for manager actions like edit/respond, cancel. - * - * @param {Number} row number corresponding to leave request in the list - * @return {Object} this object - */ - openActionsForRow: function (row) { - this.chromy.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); - - return this; - }, - - /** - * Expands filters on screen - * - * @return {Object} this object - */ - expandFilter: function () { - this.chromy.click('.chr_manage_leave_requests__filter'); - this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header div:nth-child(1)'); - - return this; - }, - - /** - * Opens leave type filter - * - * @param {Number} leaveType index like 1 for Holiday/Vacation, 2 for TOIL, 3 for Sickness - * @return {Object} this object - */ - openLeaveTypeFor: function (leaveType) { - this.chromy.evaluate(function (leaveType) { - var element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); - - element.selectedIndex = leaveType;// for TOIL option - element.dispatchEvent(new Event('change')); - }, [leaveType]); - this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); - - return this; - }, - - /** - * User clicks on the edit/respond action - * - * @param {Number} row number corresponding to leave request in the list - * @return {Promise} - */ - editRequest: function (row) { - this.chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('leave-request-popup-details-tab .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - return this; - }, - - /** - * Apply leave on behalf of staff - * @param {String} row number corresponding to leave request in the list like leave, sickness or toil - * @return {Promise} - */ - applyLeaveForStaff: function (leaveType) { - var leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; - - this.chromy.click('.button-container leave-request-record-actions .dropdown-toggle'); - this.chromy.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); - - this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); - } - }); -})(); +module.exports = page.extend({ + /** + * Wait for the page to be ready as it waits for the actions of the first + * row of leave requests to be visible + * + * @return {Object} this object + */ + waitForReady: function () { + this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); + }, + + /** + * Change the filter by Assignee + * + * @param {String} type (me|unassigned|all) + * @return {Object} this object + */ + changeFilterByAssignee: function (type) { + var filters = ['me', 'unassigned', 'all']; + + this.chromy.click( + '.chr_manage_leave_requests__assignee_filter button:nth-of-type(' + + (filters.indexOf(type) + 1) + + ')'); + this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); + + return this; + }, + + /** + * Opens the dropdown for manager actions like edit/respond, cancel. + * + * @param {Number} row number corresponding to leave request in the list + * @return {Object} this object + */ + openActionsForRow: function (row) { + this.chromy.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); + + return this; + }, + + /** + * Expands filters on screen + * + * @return {Object} this object + */ + expandFilter: function () { + this.chromy.click('.chr_manage_leave_requests__filter'); + this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header div:nth-child(1)'); + + return this; + }, + + /** + * Opens leave type filter + * + * @param {Number} leaveType index like 1 for Holiday/Vacation, 2 for TOIL, 3 for Sickness + * @return {Object} this object + */ + openLeaveTypeFor: function (leaveType) { + this.chromy.evaluate(function (leaveType) { + var element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); + + element.selectedIndex = leaveType;// for TOIL option + element.dispatchEvent(new Event('change')); + }, [leaveType]); + this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); + + return this; + }, + + /** + * User clicks on the edit/respond action + * + * @param {Number} row number corresponding to leave request in the list + * @return {Promise} + */ + editRequest: function (row) { + this.chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('leave-request-popup-details-tab .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + + return this; + }, + + /** + * Apply leave on behalf of staff + * @param {String} row number corresponding to leave request in the list like leave, sickness or toil + * @return {Promise} + */ + applyLeaveForStaff: function (leaveType) { + var leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; + + this.chromy.click('.button-container leave-request-record-actions .dropdown-toggle'); + this.chromy.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); + + this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js index 5d45fe25410..65c23877022 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js @@ -2,80 +2,78 @@ var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Clears the currently selected month from the calendar "Selected Months" - * field. - * - * @returns {Object} - returns a reference to the page object. - */ - clearCurrentlySelectedMonth: function () { - this.chromy.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); +module.exports = page.extend({ + /** + * Clears the currently selected month from the calendar "Selected Months" + * field. + * + * @returns {Object} - returns a reference to the page object. + */ + clearCurrentlySelectedMonth: function () { + this.chromy.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); - return this; - }, + return this; + }, - /** - * Displays the leave information for a particular month in the leave - * calendar. - * - * @param {String} monthName - the month of the name as it appear in the - * "Selected Months" options. - * @returns {Object} - returns a reference to the page object. - */ - showMonth: function (monthName) { - this.chromy.click('.chr_leave-calendar__day-selector input'); - this.chromy.evaluate(function (monthName) { - jQuery('.ui-select-choices-row:contains(' + monthName + ')').click(); - }, [monthName]); - this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); + /** + * Displays the leave information for a particular month in the leave + * calendar. + * + * @param {String} monthName - the month of the name as it appear in the + * "Selected Months" options. + * @returns {Object} - returns a reference to the page object. + */ + showMonth: function (monthName) { + this.chromy.click('.chr_leave-calendar__day-selector input'); + this.chromy.evaluate(function (monthName) { + jQuery('.ui-select-choices-row:contains(' + monthName + ')').click(); + }, [monthName]); + this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); - return this; - }, + return this; + }, - /** - * Hovers on top of a leave day visible on the calendar until a tooltip - * pops up. - * - * @returns {Object} - returns a reference to the page object. - */ - showTooltip: function () { - var chromy = this.chromy; + /** + * Hovers on top of a leave day visible on the calendar until a tooltip + * pops up. + * + * @returns {Object} - returns a reference to the page object. + */ + showTooltip: function () { + var chromy = this.chromy; - chromy.evaluate(function () { - var event = new MouseEvent('mouseover'); - document.querySelector('.chr_leave-calendar__item a').dispatchEvent(event); - }); - chromy.waitUntilVisible('.tooltip'); + chromy.evaluate(function () { + var event = new MouseEvent('mouseover'); + document.querySelector('.chr_leave-calendar__item a').dispatchEvent(event); + }); + chromy.waitUntilVisible('.tooltip'); - return this; - }, + return this; + }, - /** - * Displays the leave information for a particular year in the leave calendar. - * - * @param {Number} year - the year to select from the absence period options. - * @returns {Object} - returns a reference to the page object. - */ - showYear: function (year) { - this.chromy.evaluate(function (year) { - var select = jQuery('.chr_manager_calendar__sub-header select'); - var yearValue = select.find('option:contains(' + year + ')').attr('value'); + /** + * Displays the leave information for a particular year in the leave calendar. + * + * @param {Number} year - the year to select from the absence period options. + * @returns {Object} - returns a reference to the page object. + */ + showYear: function (year) { + this.chromy.evaluate(function (year) { + var select = jQuery('.chr_manager_calendar__sub-header select'); + var yearValue = select.find('option:contains(' + year + ')').attr('value'); - select.val(yearValue).change(); - }, [year]); - this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); + select.val(yearValue).change(); + }, [year]); + this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); - return this; - }, + return this; + }, - /** - * Wait for the page to be ready by looking at - * the visibility of a leave calendar item element - */ - waitForReady: function () { - this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); - } - }); -})(); + /** + * Wait for the page to be ready by looking at + * the visibility of a leave calendar item element + */ + waitForReady: function () { + this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js index 2e8a4390f42..c4a8e091a88 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js @@ -4,171 +4,168 @@ var _ = require('lodash'); var Promise = require('es6-promise').Promise; var page = require('./page'); -module.exports = (function () { - return page.extend({ - - /** - * Selects the days mode for the opened leave request - * - * @param {String} mode single|multiple - * @return {Promise} - */ - changeRequestDaysMode: function (mode) { - var optionIndex = ['multiple', 'single'].indexOf(mode) + 1; - - this.chromy.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); - - return this; - }, - - /** - * User clicks on the edit/respond action - * - * @param {Number} row number corresponding to leave request in the list - * @return {Promise} - */ - editRequest: function (row) { - var chromy = this.chromy; - - return new Promise(function (resolve) { - chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('leave-request-popup-details-tab .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); - }.bind(this)); - }, - - /** - * Expands deduction field to show selectors - * - * @param {String} type from|to - * @return {Promise} - */ - expandDeductionField: function (type) { - var fieldSelector = '[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"] a'; - - this.chromy.wait(fieldSelector); - this.chromy.click(fieldSelector); - - return this; - }, - - /** - * Opens the Leave Request Modal for a new request of the given type - * - * @param {String} requestType leave|sickness|toil - * @return {Promise} - */ - newRequest: function (requestType) { - var requestTypes = ['leave', 'sickness', 'toil']; // must be in the same quantity and order as in UI - var requestTypeButtonIndex = requestTypes.indexOf(requestType) + 1; - var actionDropdownSelector = 'leave-request-record-actions'; - var actionButtonSelector = actionDropdownSelector + ' .dropdown-menu li:nth-child(' + requestTypeButtonIndex + ') a'; - - this.chromy.click(actionDropdownSelector + ' [uib-dropdown] > button'); - this.chromy.wait(actionButtonSelector); - this.chromy.click(actionButtonSelector); - this.chromy.waitUntilVisible('.chr_leave-request-modal__tab .form-group'); - - return this; - }, - - /** - * Opens the dropdown for staff actions like edit/respond, cancel. - * - * @param {Number} row number corresponding to leave request in the list - * @return {Object} this object - */ - openActionsForRow: function (row) { - this.chromy.wait('tr:nth-child(1) div[uib-dropdown] a:nth-child(1)'); - this.chromy.click('div:nth-child(2) > div > table > tbody > tr:nth-child(' + (row || 1) + ') div[uib-dropdown] a:nth-child(1)'); - - return this; - }, - - /** - * Opens the given section of my report pageName - * - * @param {String} section - * @return {Object} this object - */ - openSection: function (section) { - this.chromy.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); - this.chromy.wait(function () { +module.exports = page.extend({ + /** + * Selects the days mode for the opened leave request + * + * @param {String} mode single|multiple + * @return {Promise} + */ + changeRequestDaysMode: function (mode) { + var optionIndex = ['multiple', 'single'].indexOf(mode) + 1; + + this.chromy.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); + + return this; + }, + + /** + * User clicks on the edit/respond action + * + * @param {Number} row number corresponding to leave request in the list + * @return {Promise} + */ + editRequest: function (row) { + var chromy = this.chromy; + + return new Promise(function (resolve) { + chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + chromy.wait(function () { // = waitWhileVisible - var dom = document.querySelector('.spinner'); + var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('leave-request-popup-details-tab .spinner'); return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); - return this; - }, - - /** - * Selects the request Absence Type by the given label - * - * @param {String} absenceTypeLabel ex. "Holiday in Hours" - * @return {Promise} - */ - selectRequestAbsenceType: function (absenceTypeLabel) { - this.chromy.evaluate(function (absenceTypeLabel) { - var absenceTypeSelect = document.querySelector('[name=absenceTypeSelect]'); - - absenceTypeSelect.selectedIndex = _.findIndex(absenceTypeSelect.querySelectorAll('option'), function (option) { - return option.text.search(absenceTypeLabel) !== -1; - }); // Select the needed option - absenceTypeSelect.dispatchEvent(new Event('change')); // Trigger onChange event - }, [absenceTypeLabel]); - - return this; - }, - - /** - * Selects a date in the datepicker - * - * @param {String} type from|to - * @param {Number} weekPosition eg. 2 for second week in the calendar - * @param {Number} weekDayPosition eg. 1 for Monday or 4 for Thursday - * @return {Promise} - */ - selectRequestDate: function (type, weekPosition, weekDayPosition) { - var daySelector = '.uib-daypicker tr:nth-child(' + - weekPosition + ') td:nth-child( ' + weekDayPosition + ') button'; - - this.chromy.click('[ng-model="detailsTab.uiOptions.' + type + 'Date"]'); - this.chromy.wait(daySelector); - this.chromy.click(daySelector); - this.chromy.waitUntilVisible('[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"]'); - - return this; - }, - - /** - * Wait for the page to be ready - * - * @return {Object} this object - */ - waitForReady: function () { - this.chromy.waitUntilVisible('td[ng-click="report.toggleSection(\'pending\')"]'); - }, - - /** - * Waits for the request balance to be calculated - * - * @return {Promise} - */ - waitUntilRequestBalanceIsCalculated: function () { - this.chromy.waitUntilVisible('[ng-show="detailsTab.uiOptions.showBalance"]'); - - return this; - } - }); -})(); + resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); + }.bind(this)); + }, + + /** + * Expands deduction field to show selectors + * + * @param {String} type from|to + * @return {Promise} + */ + expandDeductionField: function (type) { + var fieldSelector = '[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"] a'; + + this.chromy.wait(fieldSelector); + this.chromy.click(fieldSelector); + + return this; + }, + + /** + * Opens the Leave Request Modal for a new request of the given type + * + * @param {String} requestType leave|sickness|toil + * @return {Promise} + */ + newRequest: function (requestType) { + var requestTypes = ['leave', 'sickness', 'toil']; // must be in the same quantity and order as in UI + var requestTypeButtonIndex = requestTypes.indexOf(requestType) + 1; + var actionDropdownSelector = 'leave-request-record-actions'; + var actionButtonSelector = actionDropdownSelector + ' .dropdown-menu li:nth-child(' + requestTypeButtonIndex + ') a'; + + this.chromy.click(actionDropdownSelector + ' [uib-dropdown] > button'); + this.chromy.wait(actionButtonSelector); + this.chromy.click(actionButtonSelector); + this.chromy.waitUntilVisible('.chr_leave-request-modal__tab .form-group'); + + return this; + }, + + /** + * Opens the dropdown for staff actions like edit/respond, cancel. + * + * @param {Number} row number corresponding to leave request in the list + * @return {Object} this object + */ + openActionsForRow: function (row) { + this.chromy.wait('tr:nth-child(1) div[uib-dropdown] a:nth-child(1)'); + this.chromy.click('div:nth-child(2) > div > table > tbody > tr:nth-child(' + (row || 1) + ') div[uib-dropdown] a:nth-child(1)'); + + return this; + }, + + /** + * Opens the given section of my report pageName + * + * @param {String} section + * @return {Object} this object + */ + openSection: function (section) { + this.chromy.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + + return this; + }, + + /** + * Selects the request Absence Type by the given label + * + * @param {String} absenceTypeLabel ex. "Holiday in Hours" + * @return {Promise} + */ + selectRequestAbsenceType: function (absenceTypeLabel) { + this.chromy.evaluate(function (absenceTypeLabel) { + var absenceTypeSelect = document.querySelector('[name=absenceTypeSelect]'); + + absenceTypeSelect.selectedIndex = _.findIndex(absenceTypeSelect.querySelectorAll('option'), function (option) { + return option.text.search(absenceTypeLabel) !== -1; + }); // Select the needed option + absenceTypeSelect.dispatchEvent(new Event('change')); // Trigger onChange event + }, [absenceTypeLabel]); + + return this; + }, + + /** + * Selects a date in the datepicker + * + * @param {String} type from|to + * @param {Number} weekPosition eg. 2 for second week in the calendar + * @param {Number} weekDayPosition eg. 1 for Monday or 4 for Thursday + * @return {Promise} + */ + selectRequestDate: function (type, weekPosition, weekDayPosition) { + var daySelector = '.uib-daypicker tr:nth-child(' + + weekPosition + ') td:nth-child( ' + weekDayPosition + ') button'; + + this.chromy.click('[ng-model="detailsTab.uiOptions.' + type + 'Date"]'); + this.chromy.wait(daySelector); + this.chromy.click(daySelector); + this.chromy.waitUntilVisible('[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"]'); + + return this; + }, + + /** + * Wait for the page to be ready + * + * @return {Object} this object + */ + waitForReady: function () { + this.chromy.waitUntilVisible('td[ng-click="report.toggleSection(\'pending\')"]'); + }, + + /** + * Waits for the request balance to be calculated + * + * @return {Promise} + */ + waitUntilRequestBalanceIsCalculated: function () { + this.chromy.waitUntilVisible('[ng-show="detailsTab.uiOptions.showBalance"]'); + + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js index c6d7301f9f5..492caa0f2fd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js @@ -1,18 +1,15 @@ var modal = require('./../page'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Opens See Resources section + * + * @return {object} + */ + seeResources: function () { + this.chromy.click('.fieldset-title'); + this.chromy.wait(2000); // wait for animation to complete - /** - * Opens See Resources section - * - * @return {object} - */ - seeResources: function () { - this.chromy.click('.fieldset-title'); - this.chromy.wait(2000); // wait for animation to complete - - return this; - } - }); -})(); + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js index 018f5c97d9b..e982a0803f2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js @@ -1,18 +1,15 @@ var modal = require('./../page'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Opens Edit My Details Popup + * + * @return {Object} + */ + showEditMyDetailsPopup: function () { + this.chromy.click('[href="/my_details/nojs/view"]'); + this.chromy.waitUntilVisible('.modal-civihr-custom__section'); - /** - * Opens Edit My Details Popup - * - * @return {Object} - */ - showEditMyDetailsPopup: function () { - this.chromy.click('[href="/my_details/nojs/view"]'); - this.chromy.waitUntilVisible('.modal-civihr-custom__section'); - - return this; - } - }); -})(); + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js index 5a55b282dd5..87b7b6719b8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js @@ -1,27 +1,24 @@ var modal = require('../page'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Opens Completed tasks modal + */ + openCompletedTasksModal: function () { + this.chromy.click('.pane-views-tasks-block a.show-complete-tasks'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.loading-spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + this.chromy.waitUntilVisible('.view-Tasks'); + }, - /** - * Opens Completed tasks modal - */ - openCompletedTasksModal: function () { - this.chromy.click('.pane-views-tasks-block a.show-complete-tasks'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.loading-spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - this.chromy.waitUntilVisible('.view-Tasks'); - }, - - /** - * Opens Create New Task modal - */ - openCreateNewTaskModal: function () { - this.chromy.click('.create-new-task'); - this.chromy.waitUntilVisible('#civihr-employee-portal-civi-tasks-form'); - } - }); -})(); + /** + * Opens Create New Task modal + */ + openCreateNewTaskModal: function () { + this.chromy.click('.create-new-task'); + this.chromy.waitUntilVisible('#civihr-employee-portal-civi-tasks-form'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js index 9538e2b2162..5b83262e2c5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js @@ -1,18 +1,15 @@ var modal = require('./../page'); -module.exports = (function () { - return modal.extend({ +module.exports = modal.extend({ + /** + * Opens More Details section + * + * @return {object} + */ + showMoreDetails: function () { + this.chromy.click('.fieldset-title'); + this.chromy.wait(2000); - /** - * Opens More Details section - * - * @return {object} - */ - showMoreDetails: function () { - this.chromy.click('.fieldset-title'); - this.chromy.wait(2000); - - return this; - } - }); -})(); + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js index 8d480b2be87..2cc3da21a27 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js @@ -1,22 +1,20 @@ var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - tabTitle: 'Documents', - /** - * Overrides the original tab's `waitForReady` method - * There is no single selector that can be used as `readySelector` (which - * would be used by the original `waitForReady` method) to detect when the - * tab is ready, so as a quick workaround we simply override the method - * and perform all the needed checks in it - */ - waitForReady: function () { - this.chromy.waitUntilVisible('form[name="formDocuments"]'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.ct-spinner-cover'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - } - }); -})(); +module.exports = tab.extend({ + tabTitle: 'Documents', + /** + * Overrides the original tab's `waitForReady` method + * There is no single selector that can be used as `readySelector` (which + * would be used by the original `waitForReady` method) to detect when the + * tab is ready, so as a quick workaround we simply override the method + * and perform all the needed checks in it + */ + waitForReady: function () { + this.chromy.waitUntilVisible('form[name="formDocuments"]'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.ct-spinner-cover'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js index 7a5a3852962..745b0f874da 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js @@ -1,73 +1,71 @@ var Promise = require('es6-promise').Promise; var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - tabTitle: 'Job Contract', +module.exports = tab.extend({ + tabTitle: 'Job Contract', - /** - * Clicks on the delete button - * - * @return {object} - */ - attemptDelete: function () { - this.chromy.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); - this.waitForModal(); - }, + /** + * Clicks on the delete button + * + * @return {object} + */ + attemptDelete: function () { + this.chromy.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); + this.waitForModal(); + }, - /** - * Opens the modal of an already existing contract - * - * @param {string} mode "correct" or "revision" - * @return {Promise} resolves with the job contract modal object - */ - openContractModal: function (mode) { - var param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); + /** + * Opens the modal of an already existing contract + * + * @param {string} mode "correct" or "revision" + * @return {Promise} resolves with the job contract modal object + */ + openContractModal: function (mode) { + var param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); - return new Promise(function (resolve) { - this.chromy.click('[ng-click="modalContract(\'' + param + '\')"]'); - resolve(this.waitForModal('job-contract')); - }.bind(this)); - }, + return new Promise(function (resolve) { + this.chromy.click('[ng-click="modalContract(\'' + param + '\')"]'); + resolve(this.waitForModal('job-contract')); + }.bind(this)); + }, - /** - * Opens the modal for creating a new contract - * - * @return {Promise} resolves with the job contract modal object - */ - openNewContractModal: function () { - return new Promise(function (resolve) { - this.chromy.click('.hrjc-btn-add-contract > .btn-primary'); - resolve(this.waitForModal('job-contract')); - }.bind(this)); - }, + /** + * Opens the modal for creating a new contract + * + * @return {Promise} resolves with the job contract modal object + */ + openNewContractModal: function () { + return new Promise(function (resolve) { + this.chromy.click('.hrjc-btn-add-contract > .btn-primary'); + resolve(this.waitForModal('job-contract')); + }.bind(this)); + }, - /** - * Overrides the original tab's `waitForReady` method - * There is no single selector that can be used as `readySelector` (which - * would be used by the original `waitForReady` method) to detect when the - * tab is ready, so as a quick workaround we simply override the method - * and perform all the needed checks in it - */ - waitForReady: function () { - this.chromy.waitUntilVisible('.hrjc-summary'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.hrjc-list-contract .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); + /** + * Overrides the original tab's `waitForReady` method + * There is no single selector that can be used as `readySelector` (which + * would be used by the original `waitForReady` method) to detect when the + * tab is ready, so as a quick workaround we simply override the method + * and perform all the needed checks in it + */ + waitForReady: function () { + this.chromy.waitUntilVisible('.hrjc-summary'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.hrjc-list-contract .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); - this.chromy.wait(500); - }, + this.chromy.wait(500); + }, - /** - * Shows the full history of a contract - * - * @return {object} - */ - showFullHistory: function () { - this.chromy.click('[heading="Full History"] > a'); - this.chromy.wait('.hrjc-context-menu-toggle'); - } - }); -})(); + /** + * Shows the full history of a contract + * + * @return {object} + */ + showFullHistory: function () { + this.chromy.click('[heading="Full History"] > a'); + this.chromy.wait('.hrjc-context-menu-toggle'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js index b7019df104f..bfc207e396e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js @@ -1,62 +1,60 @@ var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - readySelector: '.job-role__tabs', - tabTitle: 'Job Roles', - - /** - * Clicks on the delete button - */ - attemptDelete: function () { - this.chromy.click('.job-role [ng-click*="removeRole"]'); - this.waitForModal(); - }, - - /** - * Clicks on the edit button of a job role - * - * @return {Object} - */ - edit: function () { - this.chromy.click('.tab-pane.active .job-role__actions .btn-link[ng-click$="show()"]'); - this.chromy.wait(100); - - return this; - }, - - /** - * Opens the ui-select with the given name - * - * @param {String} name - * @return {Object} - */ - openDropdown: function (name) { - var common = 'jobroles.editData[job_roles_data.id]'; - - this.chromy.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); - this.chromy.wait(100); - - return this; - }, - - /** - * Show the form for adding a new job role - */ - showAddNew: function () { - this.chromy.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); - }, - - /** - * Changes active tab - * - * @param {String} tabName - * @return {Object} - */ - switchToTab: function (tabName) { - this.chromy.click('[heading="' + tabName + '"] > a'); - - return this; - } - }); -})(); +module.exports = tab.extend({ + readySelector: '.job-role__tabs', + tabTitle: 'Job Roles', + + /** + * Clicks on the delete button + */ + attemptDelete: function () { + this.chromy.click('.job-role [ng-click*="removeRole"]'); + this.waitForModal(); + }, + + /** + * Clicks on the edit button of a job role + * + * @return {Object} + */ + edit: function () { + this.chromy.click('.tab-pane.active .job-role__actions .btn-link[ng-click$="show()"]'); + this.chromy.wait(100); + + return this; + }, + + /** + * Opens the ui-select with the given name + * + * @param {String} name + * @return {Object} + */ + openDropdown: function (name) { + var common = 'jobroles.editData[job_roles_data.id]'; + + this.chromy.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); + this.chromy.wait(100); + + return this; + }, + + /** + * Show the form for adding a new job role + */ + showAddNew: function () { + this.chromy.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); + }, + + /** + * Changes active tab + * + * @param {String} tabName + * @return {Object} + */ + switchToTab: function (tabName) { + this.chromy.click('[heading="' + tabName + '"] > a'); + + return this; + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js index 934f2019c98..6895b5675ea 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js @@ -1,9 +1,7 @@ var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - readySelector: '.chr_leave-balance-tab', - tabTitle: 'Leave Balance', - tabUiSref: 'leave-balances' - }); -})(); +module.exports = tab.extend({ + readySelector: '.chr_leave-balance-tab', + tabTitle: 'Leave Balance', + tabUiSref: 'leave-balances' +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js index 0a8eec9bf04..a2bda12fedf 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js @@ -1,9 +1,7 @@ var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - readySelector: 'leave-calendar-day', - tabTitle: 'Leave Calendar', - tabUiSref: 'calendar' - }); -})(); +module.exports = tab.extend({ + readySelector: 'leave-calendar-day', + tabTitle: 'Leave Calendar', + tabUiSref: 'calendar' +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js index f5e2bc660ee..2edba13b5a8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js @@ -1,16 +1,14 @@ var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - readySelector: '.chr_manage_leave_requests__panel_body', - tabUiSref: 'requests', +module.exports = tab.extend({ + readySelector: '.chr_manage_leave_requests__panel_body', + tabUiSref: 'requests', - /** - * Shows filters - */ - showFilters: function () { - this.chromy.click('.chr_manage_leave_requests__filter'); - this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header'); - } - }); -})(); + /** + * Shows filters + */ + showFilters: function () { + this.chromy.click('.chr_manage_leave_requests__filter'); + this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header'); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js index 2bfea85a7ce..0a6fa683585 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js @@ -1,14 +1,11 @@ var page = require('../page'); -module.exports = (function () { - return page.extend({ - - /** - * Defines that the tab is ready when the a specific selector is visible - * @return {boolean} - */ - waitForReady: function () { - this.chromy.waitUntilVisible(this.readySelector); - } - }); -})(); +module.exports = page.extend({ + /** + * Defines that the tab is ready when the a specific selector is visible + * @return {boolean} + */ + waitForReady: function () { + this.chromy.waitUntilVisible(this.readySelector); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js index 927d165ca71..17d336cdfba 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js @@ -1,8 +1,6 @@ var tab = require('./tab'); -module.exports = (function () { - return tab.extend({ - readySelector: '.ct-page-contact', - tabTitle: 'Tasks' - }); -})(); +module.exports = tab.extend({ + readySelector: '.ct-page-contact', + tabTitle: 'Tasks' +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js index 3d10797ea0c..f7450aed637 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js @@ -1,122 +1,119 @@ var Promise = require('es6-promise').Promise; var page = require('./page'); -module.exports = (function () { - var taskSelector = '.ct-list-task > li:nth-child(1)'; - var editableSelectors = { - assigned: '[editable-ui-select="task.assignee_contact_id[0]"]', - date: '[editable-bsdate="task.activity_date_time"]', - subject: '[editable-text="task.subject"]', - target: '[editable-ui-select="task.target_contact_id[0]"]' - }; - - return page.extend({ - - /** - * Shows the assignment modal - * - * @return {Promise} resolves with the assignment modal page object - */ - addAssignment: function () { - return new Promise(function (resolve) { - this.chromy.click('a[ng-click*="modalAssignment"]'); - resolve(this.waitForModal('assignment')); - }.bind(this)); - }, - - /** - * Shows the task modal - * - * @return {Promise} resolves with the task modal page object - */ - addTask: function () { - return new Promise(function (resolve) { - this.chromy.click('a[ng-click*="itemAdd"]'); - resolve(this.waitForModal('task')); - }.bind(this)); - }, - - /** - * Opens the advanced filters - * - * @return {object} - */ - advancedFilters: function () { - this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - this.chromy.wait(500); - - return this; - }, - - /** - * Shows the given edit-in-place field - * - * @param {string} fieldName - * @return {object} - */ - inPlaceEdit: function (fieldName) { - this.chromy.click(editableSelectors[fieldName]); - this.chromy.wait(200); - - return this; - }, - - /** - * Opens the first task of the list - * - * @return {Promise} resolves with the task modal page object - */ - openTask: function () { - return new Promise(function (resolve) { - this.chromy.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - resolve(this.waitForModal('task')); - }.bind(this)); - }, - - /** - * Shows the "select dates" filter - */ - selectDates: function () { - this.chromy.click('.ct-select-dates'); - this.chromy.wait(500); - }, - - /** - * Expands the "show more" area of the first task of the list - * - * @return {object} - */ - showMore: function () { - this.chromy.click(taskSelector + ' a[ng-click*="isCollapsed"]'); - this.chromy.waitUntilVisible(taskSelector + ' article'); - this.chromy.wait(500); - - return this; - }, - - /** - * Shows the dropdown of the actions available on any given task - * - * @return {object} - */ - taskActions: function () { - this.chromy.click(taskSelector + ' .ct-context-menu-toggle'); - - return this; - }, - - /** - * Waits until the specified select is visible on the page - */ - waitForReady: function () { - this.chromy.waitUntilVisible('.ct-container-inner'); - this.chromy.wait(300); - } - }); -})(); +var taskSelector = '.ct-list-task > li:nth-child(1)'; +var editableSelectors = { + assigned: '[editable-ui-select="task.assignee_contact_id[0]"]', + date: '[editable-bsdate="task.activity_date_time"]', + subject: '[editable-text="task.subject"]', + target: '[editable-ui-select="task.target_contact_id[0]"]' +}; + +module.exports = page.extend({ + /** + * Shows the assignment modal + * + * @return {Promise} resolves with the assignment modal page object + */ + addAssignment: function () { + return new Promise(function (resolve) { + this.chromy.click('a[ng-click*="modalAssignment"]'); + resolve(this.waitForModal('assignment')); + }.bind(this)); + }, + + /** + * Shows the task modal + * + * @return {Promise} resolves with the task modal page object + */ + addTask: function () { + return new Promise(function (resolve) { + this.chromy.click('a[ng-click*="itemAdd"]'); + resolve(this.waitForModal('task')); + }.bind(this)); + }, + + /** + * Opens the advanced filters + * + * @return {object} + */ + advancedFilters: function () { + this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); + this.chromy.wait(500); + + return this; + }, + + /** + * Shows the given edit-in-place field + * + * @param {string} fieldName + * @return {object} + */ + inPlaceEdit: function (fieldName) { + this.chromy.click(editableSelectors[fieldName]); + this.chromy.wait(200); + + return this; + }, + + /** + * Opens the first task of the list + * + * @return {Promise} resolves with the task modal page object + */ + openTask: function () { + return new Promise(function (resolve) { + this.chromy.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); + this.chromy.wait(function () { + // = waitWhileVisible + var dom = document.querySelector('.spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + + resolve(this.waitForModal('task')); + }.bind(this)); + }, + + /** + * Shows the "select dates" filter + */ + selectDates: function () { + this.chromy.click('.ct-select-dates'); + this.chromy.wait(500); + }, + + /** + * Expands the "show more" area of the first task of the list + * + * @return {object} + */ + showMore: function () { + this.chromy.click(taskSelector + ' a[ng-click*="isCollapsed"]'); + this.chromy.waitUntilVisible(taskSelector + ' article'); + this.chromy.wait(500); + + return this; + }, + + /** + * Shows the dropdown of the actions available on any given task + * + * @return {object} + */ + taskActions: function () { + this.chromy.click(taskSelector + ' .ct-context-menu-toggle'); + + return this; + }, + + /** + * Waits until the specified select is visible on the page + */ + waitForReady: function () { + this.chromy.waitUntilVisible('.ct-container-inner'); + this.chromy.wait(300); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js index 43816a61748..ddfa82c0e55 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js @@ -1,23 +1,21 @@ var page = require('./page'); -module.exports = (function () { - return page.extend({ - /** - * Displays the work pattern calendar form. - * - * @return The Page instance. - */ - showCalendarForm: function () { - this.chromy.click('a[href="#work-pattern-calendar"]'); +module.exports = page.extend({ + /** + * Displays the work pattern calendar form. + * + * @return The Page instance. + */ + showCalendarForm: function () { + this.chromy.click('a[href="#work-pattern-calendar"]'); - return this; - }, + return this; + }, - /** - * Waits until the work pattern form is visible. - */ - waitForReady: function () { - this.chromy.visible('.work-pattern-form'); - } - }); -})(); + /** + * Waits until the work pattern form is visible. + */ + waitForReady: function () { + this.chromy.visible('.work-pattern-form'); + } +}); From fed4469abaa80833604d7125e967ea9c88459a57 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 22 Mar 2018 09:26:06 +0100 Subject: [PATCH 053/251] PCHR-3221: Remove the ssp/ folder in page-objects/ --- .../backstop_data/engine_scripts/ssp/edit-my-details.js | 2 +- .../engine_scripts/ssp/hr-resources-see-resources.js | 2 +- .../backstop_data/engine_scripts/ssp/tasks-create-new-task.js | 2 +- .../engine_scripts/ssp/tasks-show-completed-tasks.js | 2 +- .../backstop_data/engine_scripts/ssp/vacancies-more-details.js | 2 +- .../page-objects/{ssp/hr-resources.js => ssp-hr-resources.js} | 0 .../page-objects/{ssp/my-details.js => ssp-my-details.js} | 0 .../backstop_data/page-objects/{ssp/tasks.js => ssp-tasks.js} | 0 .../page-objects/{ssp/vacancies.js => ssp-vacancies.js} | 0 9 files changed, 5 insertions(+), 5 deletions(-) rename uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/{ssp/hr-resources.js => ssp-hr-resources.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/{ssp/my-details.js => ssp-my-details.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/{ssp/tasks.js => ssp-tasks.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/{ssp/vacancies.js => ssp-vacancies.js} (100%) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js index c14b199cd26..7b0e4e3a512 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js @@ -1,6 +1,6 @@ 'use strict'; -var page = require('../../page-objects/ssp/my-details'); +var page = require('../../page-objects/ssp-my-details'); module.exports = function (engine) { page.init(engine).showEditMyDetailsPopup(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js index 6815777778d..879ab5e6e72 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js @@ -1,6 +1,6 @@ 'use strict'; -var page = require('../../page-objects/ssp/hr-resources'); +var page = require('../../page-objects/ssp-hr-resources'); module.exports = function (engine) { page.init(engine).seeResources(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js index c080ce404cf..20e2c7b3f3d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js @@ -1,6 +1,6 @@ 'use strict'; -var page = require('../../page-objects/ssp/tasks'); +var page = require('../../page-objects/ssp-tasks'); module.exports = function (engine) { page.init(engine).openCreateNewTaskModal(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js index 634cd0b61bd..79a5b4027fb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js @@ -1,6 +1,6 @@ 'use strict'; -var page = require('../../page-objects/ssp/tasks'); +var page = require('../../page-objects/ssp-tasks'); module.exports = function (engine) { page.init(engine).openCompletedTasksModal(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js index 35d49dcf20d..f63fc7f6a88 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js @@ -1,6 +1,6 @@ 'use strict'; -var page = require('../../page-objects/ssp/vacancies'); +var page = require('../../page-objects/ssp-vacancies'); module.exports = function (engine) { page.init(engine).showMoreDetails(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/hr-resources.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/my-details.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/tasks.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp/vacancies.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js From 12b8e432c02207a780ddcd4880e0bd5163cd20ab Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 22 Mar 2018 09:29:50 +0100 Subject: [PATCH 054/251] PCHR-3221: Remove more underscores from engine script file names --- ...isible.js => my-leave-calendar-current-month-visible.js} | 0 .../scenarios/ssp-la-manager-leave-calendar.json | 6 +++--- .../backstop_data/scenarios/ssp-la-my-leave-calendar.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/{my-leave-calendar_current-month-visible.js => my-leave-calendar-current-month-visible.js} (100%) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json index c13ff1c43b9..7bfdaaa2afe 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json @@ -3,19 +3,19 @@ { "label": "Current Month: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_current-month-visible.js", + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js", "user": "civihr_manager" }, { "label": "Legend expanded: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_legend-expanded.js", + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js", "user": "civihr_manager" }, { "label": "Show all contacts: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar_all-contacts.js", + "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js", "user": "civihr_manager" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json index 0b1494e1188..9c14247b60e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json @@ -3,13 +3,13 @@ { "label": "Current Month: My Leave Calendar", "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_current-month-visible.js", + "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js", "user": "civihr_staff" }, { "label": "My Leave Calendar tooltip", "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar_tooltip.js", + "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar-tooltip.js", "user": "civihr_staff" } ] From 5846410390628b4ede74831aadd8471e286e5dcc Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 22 Mar 2018 10:24:55 +0100 Subject: [PATCH 055/251] PCHR-3221: Rearrange scripts for L&A on ssp --- .../manager-leave/calendar-all-contacts.js} | 0 .../calendar-current-month-visible.js} | 0 .../manager-leave/calendar-legend-expanded.js} | 0 .../manager-leave}/leave-balances.js | 0 .../leave-requests-as-admin-all-requests.js} | 0 .../manager-leave/leave-requests-as-admin.js} | 0 .../leave-requests-show-actions.js | 0 .../leave-requests-with-filters.js | 0 .../leave-requests-without-filters.js | 0 .../modal-leave-on-behalf-of-staff.js} | 0 .../manager-leave/modal-sick-edit.js} | 0 .../modal-sick-on-behalf-of-staff.js} | 0 .../manager-leave/modal-toil-edit.js} | 0 .../modal-toil-on-behalf-of-staff.js} | 0 .../my-leave/calendar-current-month-visible.js} | 0 .../my-leave/calendar-tooltip.js} | 0 .../modal-show-deduction-fields-expanded.js} | 0 .../my-leave/modal-show-deduction-fields.js} | 0 .../my-leave/report-pending-show-comments.js} | 0 .../my-leave/report-show-absence-in-hours.js} | 0 .../my-report.js => ssp/my-leave/report.js} | 0 .../backstop_data/scenarios/leave-balances.json | 2 +- .../scenarios/ssp-la-manager-leave-calendar.json | 6 +++--- .../ssp-la-manager-leave-requests-by-admin.json | 4 ++-- .../scenarios/ssp-la-manager-leave-requests.json | 16 ++++++++-------- .../scenarios/ssp-la-my-leave-calendar.json | 4 ++-- .../ssp-la-my-report-leave-request-modal.json | 8 ++++---- .../scenarios/ssp-la-my-report.json | 2 +- 28 files changed, 21 insertions(+), 21 deletions(-) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js => ssp/manager-leave/calendar-all-contacts.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js => ssp/manager-leave/calendar-current-month-visible.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js => ssp/manager-leave/calendar-legend-expanded.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager => ssp/manager-leave}/leave-balances.js (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/admin/manager-leave-requests-all-requests.js => ssp/manager-leave/leave-requests-as-admin-all-requests.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/admin/manager-leave-requests.js => ssp/manager-leave/leave-requests-as-admin.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager => ssp/manager-leave}/leave-requests-show-actions.js (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager => ssp/manager-leave}/leave-requests-with-filters.js (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager => ssp/manager-leave}/leave-requests-without-filters.js (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js => ssp/manager-leave/modal-leave-on-behalf-of-staff.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js => ssp/manager-leave/modal-sick-edit.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js => ssp/manager-leave/modal-sick-on-behalf-of-staff.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js => ssp/manager-leave/modal-toil-edit.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js => ssp/manager-leave/modal-toil-on-behalf-of-staff.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js => ssp/my-leave/calendar-current-month-visible.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-leave-calendar-tooltip.js => ssp/my-leave/calendar-tooltip.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js => ssp/my-leave/modal-show-deduction-fields-expanded.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js => ssp/my-leave/modal-show-deduction-fields.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-report-pending-show-comments.js => ssp/my-leave/report-pending-show-comments.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-report-show-absence-in-hours.js => ssp/my-leave/report-show-absence-in-hours.js} (100%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/{ssp-leave-absences/staff/my-report.js => ssp/my-leave/report.js} (100%) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-balances.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests-all-requests.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/admin/manager-leave-requests.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-show-actions.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-with-filters.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-without-filters.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-leave-calendar-tooltip.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-pending-show-comments.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report-show-absence-in-hours.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp-leave-absences/staff/my-report.js rename to uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json index 270fde8a932..ef4ae94d64e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json @@ -3,7 +3,7 @@ { "label": "SSP: Leave Balances", "url": "{{siteUrl}}/manager-leave#/manager-leave/leave-balances", - "onReadyScript": "ssp-leave-absences/manager/leave-balances.js", + "onReadyScript": "ssp/manager-leave/leave-balances.js", "user": "civihr_manager" }, { diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json index 7bfdaaa2afe..14deffddca0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json @@ -3,19 +3,19 @@ { "label": "Current Month: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar-current-month-visible.js", + "onReadyScript": "ssp/manager-leave/calendar-current-month-visible.js", "user": "civihr_manager" }, { "label": "Legend expanded: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar-legend-expanded.js", + "onReadyScript": "ssp/manager-leave/calendar-legend-expanded.js", "user": "civihr_manager" }, { "label": "Show all contacts: Manager Leave Calendar", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp-leave-absences/manager/manager-leave-calendar-all-contacts.js", + "onReadyScript": "ssp/manager-leave/calendar-all-contacts.js", "user": "civihr_manager" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json index d84d986f2b7..e4f8fbb5d36 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json @@ -3,12 +3,12 @@ { "label": "SSP Leave and Absences: Admin: Manager Leave: Leave Requests", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/admin/manager-leave-requests.js" + "onReadyScript": "ssp/manager-leave/leave-requests-as-admin.js" }, { "label": "SSP Leave and Absences: Admin: Manager Leave: Leave Requests: All Requests", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/admin/manager-leave-requests-all-requests.js" + "onReadyScript": "ssp/manager-leave/leave-requests-as-admin-all-requests.js" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json index f370348f3ee..edc70b63111 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json @@ -3,49 +3,49 @@ { "label": "Leave and Absences: Manager Leave Requests: Show actions", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-show-actions.js", + "onReadyScript": "ssp/manager-leave/leave-requests-show-actions.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show Without Filters", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-without-filters.js", + "onReadyScript": "ssp/manager-leave/leave-requests-without-filters.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show With Filters", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-with-filters.js", + "onReadyScript": "ssp/manager-leave/leave-requests-with-filters.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show staff edit toil request", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-toil.js", + "onReadyScript": "ssp/manager-leave/modal-toil-edit.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Show staff edit sickness request", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-of-staff-edit-sickness.js", + "onReadyScript": "ssp/manager-leave/modal-sick-edit.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Apply leave on behalf of staff", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/leave-requests-on-behalf-of-staff.js", + "onReadyScript": "ssp/manager-leave/modal-leave-on-behalf-of-staff.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Apply sickness on behalf of staff", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/sick-requests-on-behalf-of-staff.js", + "onReadyScript": "ssp/manager-leave/modal-sick-on-behalf-of-staff.js", "user": "civihr_manager" }, { "label": "Leave and Absences: Manager Leave Requests: Apply toil on behalf of staff", "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp-leave-absences/manager/toil-requests-on-behalf-of-staff.js", + "onReadyScript": "ssp/manager-leave/modal-toil-on-behalf-of-staff.js", "user": "civihr_manager" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json index 9c14247b60e..183fac2c171 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json @@ -3,13 +3,13 @@ { "label": "Current Month: My Leave Calendar", "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar-current-month-visible.js", + "onReadyScript": "ssp/my-leave/calendar-current-month-visible.js", "user": "civihr_staff" }, { "label": "My Leave Calendar tooltip", "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp-leave-absences/staff/my-leave-calendar-tooltip.js", + "onReadyScript": "ssp/my-leave/calendar-tooltip.js", "user": "civihr_staff" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json index e973b0c614e..23f895604cc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json @@ -3,25 +3,25 @@ { "label": "Leave and Absences: My report: Leave Request Modal: Edit: Show comments", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-pending-show-comments.js", + "onReadyScript": "ssp/my-leave/report-pending-show-comments.js", "user": "civihr_staff" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show absence in hours", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-show-absence-in-hours.js", + "onReadyScript": "ssp/my-leave/report-show-absence-in-hours.js", "user": "civihr_staff" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields.js", + "onReadyScript": "ssp/my-leave/modal-show-deduction-fields.js", "user": "civihr_staff" }, { "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields expanded", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report-leave-request-modal-show-deduction-fields-expanded.js", + "onReadyScript": "ssp/my-leave/modal-show-deduction-fields-expanded.js", "user": "civihr_staff" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json index 391a60e641d..f0664ec9cbb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json @@ -3,7 +3,7 @@ { "label": "Leave and Absences: My report", "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp-leave-absences/staff/my-report.js", + "onReadyScript": "ssp/my-leave/report.js", "user": "civihr_staff" } ] From b856ba8c7676ea7813f4f8f91274ea570396528b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 22 Mar 2018 12:55:50 +0100 Subject: [PATCH 056/251] PCHR-3221: Clean up scenarios files and labels --- ...e-periods.json => la-absence-periods.json} | 4 +- ...sence-types.json => la-absence-types.json} | 4 +- .../backstop_data/scenarios/la-dashboard.json | 24 ++++++ ...settings.json => la-general-settings.json} | 2 +- ...sence-admin-import.json => la-import.json} | 8 +- ...-holidays.json => la-public-holidays.json} | 4 +- ...rk-patterns.json => la-work-patterns.json} | 6 +- ...eave-absence-dashboard-leave-calendar.json | 9 -- ...eave-absence-dashboard-leave-requests.json | 14 --- .../scenarios/leave-balances.json | 15 ---- .../scenarios/ssp-dashboard.json | 2 +- .../backstop_data/scenarios/ssp-features.json | 8 ++ .../scenarios/ssp-hr-resources.json | 4 +- .../scenarios/ssp-hr-vacancies.json | 4 +- .../ssp-la-manager-leave-calendar.json | 22 ----- ...sp-la-manager-leave-requests-by-admin.json | 14 --- .../ssp-la-manager-leave-requests.json | 52 ----------- .../scenarios/ssp-la-manager.json | 86 +++++++++++++++++++ .../scenarios/ssp-la-my-leave-calendar.json | 16 ---- .../ssp-la-my-report-leave-request-modal.json | 28 ------ .../scenarios/ssp-la-my-report.json | 38 +++++++- .../scenarios/ssp-my-details.json | 4 +- ...wizard.json => ssp-onboarding-wizard.json} | 22 ++--- .../backstop_data/scenarios/ssp-reports.json | 8 +- .../scenarios/ssp-staff-directory.json | 2 +- .../backstop_data/scenarios/ssp-tasks.json | 6 +- 26 files changed, 193 insertions(+), 213 deletions(-) rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{leave-absence-admin-absence-periods.json => la-absence-periods.json} (68%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{leave-absence-admin-absence-types.json => la-absence-types.json} (69%) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-dashboard.json rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{leave-absence-admin-general-settings.json => la-general-settings.json} (73%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{leave-absence-admin-import.json => la-import.json} (72%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{leave-absence-admin-public-holidays.json => la-public-holidays.json} (70%) rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{leave-absence-admin-work-patterns.json => la-work-patterns.json} (70%) delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-features.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json delete mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{onboarding-wizard.json => ssp-onboarding-wizard.json} (62%) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-periods.json similarity index 68% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-periods.json index 5ff4bbaae43..7e027a0666e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-periods.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-periods.json @@ -1,11 +1,11 @@ { "scenarios": [ { - "label": "Absence Periods list", + "label": "L&A / Absence Periods / List", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/periods?action=browse" }, { - "label": "Absence Periods form", + "label": "L&A / Absence Periods / Form", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/periods?action=add" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-types.json similarity index 69% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-types.json index 292fad45eda..0baa5a958fe 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-absence-types.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-absence-types.json @@ -1,11 +1,11 @@ { "scenarios": [ { - "label": "Absence Types list", + "label": "L&A / Absence Types / List", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/types?action=browse" }, { - "label": "Absence Types form", + "label": "L&A / Absence Types / Form", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/types?action=add" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-dashboard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-dashboard.json new file mode 100644 index 00000000000..dde84ec350c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-dashboard.json @@ -0,0 +1,24 @@ +{ + "scenarios": [ + { + "label": "L&A / Dashboard / Calendar", + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/calendar", + "onReadyScript": "leave-absence-dashboard/leave-calendar/leave-calendar.js" + }, + { + "label": "L&A / Dashboard / Leave Requests", + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/requests", + "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests.js" + }, + { + "label": "L&A / Dashboard / Leave Requests / Show Filters", + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/requests", + "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests-with-filters.js" + }, + { + "label": "L&A / Dashboard / Leave Balances", + "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/leave-balances", + "onReadyScript": "leave-absence-dashboard/leave-balances/leave-balances.js" + } + ] +} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-general-settings.json similarity index 73% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-general-settings.json index 5ee7b145a04..730bd4e9029 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-general-settings.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-general-settings.json @@ -1,7 +1,7 @@ { "scenarios": [ { - "label": "General Settings", + "label": "L&A / General Settings", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/general_settings" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-import.json similarity index 72% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-import.json index ec2129ec267..e10273f5730 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-import.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-import.json @@ -1,21 +1,21 @@ { "scenarios": [ { - "label": "Leave & Absences Import - Step 1", + "label": "L&A / Import / Step 1", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import" }, { - "label": "Leave & Absences Import - Step 2", + "label": "L&A / Import / Step 2", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", "onReadyScript": "leave-absence-dashboard/import/step-2.js" }, { - "label": "Leave & Absences Import - Step 3", + "label": "L&A / Import / Step 3", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", "onReadyScript": "leave-absence-dashboard/import/step-3.js" }, { - "label": "Leave & Absences Import - Step 4", + "label": "L&A / Import / Step 4", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/import", "onReadyScript": "leave-absence-dashboard/import/step-4.js" } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-public-holidays.json similarity index 70% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-public-holidays.json index f03b6a00b8d..e12ab692344 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-public-holidays.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-public-holidays.json @@ -1,11 +1,11 @@ { "scenarios": [ { - "label": "Public Holidays list", + "label": "L&A / Public Holidays / List", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/public_holidays?action=browse" }, { - "label": "Public Holidays form", + "label": "L&A / Public Holidays / Form", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/public_holidays?action=add" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-work-patterns.json similarity index 70% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-work-patterns.json index 613a730bf7e..af6206340de 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-admin-work-patterns.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/la-work-patterns.json @@ -1,15 +1,15 @@ { "scenarios": [ { - "label": "Work Patterns list", + "label": "L&A / Work Patterns / List", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=browse" }, { - "label": "Work Pattern description form", + "label": "L&A / Work Patterns / Form / Description", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=add" }, { - "label": "Work Pattern calendar form", + "label": "L&A / Work Patterns / Form / Calendar", "url": "{{siteUrl}}/civicrm/admin/leaveandabsences/work_patterns?action=add", "onReadyScript": "work-patterns/show-calendar-form.js" } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json deleted file mode 100644 index cc89f3a541a..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-calendar.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave Absence Dashboard Leave Calendar", - "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/calendar", - "onReadyScript": "leave-absence-dashboard/leave-calendar/leave-calendar.js" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json deleted file mode 100644 index 832d349d1b2..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-absence-dashboard-leave-requests.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave Absence Dashboard Leave Requests", - "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/requests", - "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests.js" - }, - { - "label": "Leave Absence Dashboard Leave Requests with filters", - "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/requests", - "onReadyScript": "leave-absence-dashboard/leave-requests/leave-requests-with-filters.js" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json deleted file mode 100644 index ef4ae94d64e..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/leave-balances.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "scenarios": [ - { - "label": "SSP: Leave Balances", - "url": "{{siteUrl}}/manager-leave#/manager-leave/leave-balances", - "onReadyScript": "ssp/manager-leave/leave-balances.js", - "user": "civihr_manager" - }, - { - "label": "Admin Portal: Leave Balances", - "url": "{{siteUrl}}/civicrm/leaveandabsences/dashboard#/leave-balances", - "onReadyScript": "leave-absence-dashboard/leave-balances/leave-balances.js" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json index d571ce80131..65b27389bdf 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-dashboard.json @@ -1,7 +1,7 @@ { "scenarios": [ { - "label": "SSP - Dashboard", + "label": "SSP / Dashboard", "url": "{{siteUrl}}/dashboard" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-features.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-features.json new file mode 100644 index 00000000000..e9d1a98429d --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-features.json @@ -0,0 +1,8 @@ +{ + "scenarios": [ + { + "label": "SSP / Features In CiviHR", + "url": "{{siteUrl}}/features-in-civihr" + } + ] +} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json index 0573c194913..8a92a9702e2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-resources.json @@ -1,11 +1,11 @@ { "scenarios": [ { - "label": "SSP - HR Resources", + "label": "SSP / HR Resources", "url": "{{siteUrl}}/hr-resources" }, { - "label": "SSP - HR Resources - See Resources", + "label": "SSP / HR Resources / See Resources", "url": "{{siteUrl}}/hr-resources", "onReadyScript": "ssp/hr-resources-see-resources.js" } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json index b2b6338d43b..2827b008836 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-hr-vacancies.json @@ -1,11 +1,11 @@ { "scenarios": [ { - "label": "SSP - HR Vacancies", + "label": "SSP / HR Vacancies", "url": "{{siteUrl}}/hr-vacancies" }, { - "label": "SSP - HR Vacancies - More Details", + "label": "SSP / HR Vacancies / More Details", "url": "{{siteUrl}}/hr-vacancies", "onReadyScript": "ssp/vacancies-more-details.js" } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json deleted file mode 100644 index 14deffddca0..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-calendar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "scenarios": [ - { - "label": "Current Month: Manager Leave Calendar", - "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp/manager-leave/calendar-current-month-visible.js", - "user": "civihr_manager" - }, - { - "label": "Legend expanded: Manager Leave Calendar", - "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp/manager-leave/calendar-legend-expanded.js", - "user": "civihr_manager" - }, - { - "label": "Show all contacts: Manager Leave Calendar", - "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", - "onReadyScript": "ssp/manager-leave/calendar-all-contacts.js", - "user": "civihr_manager" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json deleted file mode 100644 index e4f8fbb5d36..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests-by-admin.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scenarios": [ - { - "label": "SSP Leave and Absences: Admin: Manager Leave: Leave Requests", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/leave-requests-as-admin.js" - }, - { - "label": "SSP Leave and Absences: Admin: Manager Leave: Leave Requests: All Requests", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/leave-requests-as-admin-all-requests.js" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json deleted file mode 100644 index edc70b63111..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager-leave-requests.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave and Absences: Manager Leave Requests: Show actions", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/leave-requests-show-actions.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Show Without Filters", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/leave-requests-without-filters.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Show With Filters", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/leave-requests-with-filters.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Show staff edit toil request", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/modal-toil-edit.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Show staff edit sickness request", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/modal-sick-edit.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Apply leave on behalf of staff", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/modal-leave-on-behalf-of-staff.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Apply sickness on behalf of staff", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/modal-sick-on-behalf-of-staff.js", - "user": "civihr_manager" - }, - { - "label": "Leave and Absences: Manager Leave Requests: Apply toil on behalf of staff", - "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", - "onReadyScript": "ssp/manager-leave/modal-toil-on-behalf-of-staff.js", - "user": "civihr_manager" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json new file mode 100644 index 00000000000..b4c0c624163 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json @@ -0,0 +1,86 @@ +{ + "scenarios": [ + { + "label": "SSP / Manager Leave / Current month", + "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", + "onReadyScript": "ssp/manager-leave/calendar-current-month-visible.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Legend expanded", + "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", + "onReadyScript": "ssp/manager-leave/calendar-legend-expanded.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Show all contacts", + "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", + "onReadyScript": "ssp/manager-leave/calendar-all-contacts.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Show actions", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/leave-requests-show-actions.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Show without filters", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/leave-requests-without-filters.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Show with filters", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/leave-requests-with-filters.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Show staff edit toil request", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/modal-toil-edit.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Show staff edit sickness request", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/modal-sick-edit.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Apply leave on behalf of staff", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/modal-leave-on-behalf-of-staff.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Apply sickness on behalf of staff", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/modal-sick-on-behalf-of-staff.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Apply toil on behalf of staff", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/modal-toil-on-behalf-of-staff.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave / Leave Balances", + "url": "{{siteUrl}}/manager-leave#/manager-leave/leave-balances", + "onReadyScript": "ssp/manager-leave/leave-balances.js", + "user": "civihr_manager" + }, + { + "label": "SSP / Manager Leave (as admin) / Leave Requests", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/leave-requests-as-admin.js" + }, + { + "label": "SSP / Manager Leave (as admin) / Leave Requests / All Requests", + "url": "{{siteUrl}}/manager-leave#/manager-leave/requests", + "onReadyScript": "ssp/manager-leave/leave-requests-as-admin-all-requests.js" + } + ] +} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json deleted file mode 100644 index 183fac2c171..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave-calendar.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "scenarios": [ - { - "label": "Current Month: My Leave Calendar", - "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp/my-leave/calendar-current-month-visible.js", - "user": "civihr_staff" - }, - { - "label": "My Leave Calendar tooltip", - "url": "{{siteUrl}}/my-leave#/my-leave/calendar", - "onReadyScript": "ssp/my-leave/calendar-tooltip.js", - "user": "civihr_staff" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json deleted file mode 100644 index 23f895604cc..00000000000 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report-leave-request-modal.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "scenarios": [ - { - "label": "Leave and Absences: My report: Leave Request Modal: Edit: Show comments", - "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp/my-leave/report-pending-show-comments.js", - "user": "civihr_staff" - }, - { - "label": "Leave and Absences: My report: Leave Request Modal: Create: Show absence in hours", - "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp/my-leave/report-show-absence-in-hours.js", - "user": "civihr_staff" - }, - { - "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields", - "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp/my-leave/modal-show-deduction-fields.js", - "user": "civihr_staff" - }, - { - "label": "Leave and Absences: My report: Leave Request Modal: Create: Show deductions fields expanded", - "url": "{{siteUrl}}/my-leave#/my-leave/report", - "onReadyScript": "ssp/my-leave/modal-show-deduction-fields-expanded.js", - "user": "civihr_staff" - } - ] -} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json index f0664ec9cbb..ebbd90f628e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json @@ -1,10 +1,46 @@ { "scenarios": [ { - "label": "Leave and Absences: My report", + "label": "SSP / My Leave / Report", "url": "{{siteUrl}}/my-leave#/my-leave/report", "onReadyScript": "ssp/my-leave/report.js", "user": "civihr_staff" + }, + { + "label": "SSP / My Leave / Report / Modal / Show comments", + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp/my-leave/report-pending-show-comments.js", + "user": "civihr_staff" + }, + { + "label": "SSP / My Leave / Report / Modal / Show absence in hours", + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp/my-leave/report-show-absence-in-hours.js", + "user": "civihr_staff" + }, + { + "label": "SSP / My Leave / Report / Modal / Show deductions fields", + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp/my-leave/modal-show-deduction-fields.js", + "user": "civihr_staff" + }, + { + "label": "SSP / My Leave / Report / Modal / Show deductions fields expanded", + "url": "{{siteUrl}}/my-leave#/my-leave/report", + "onReadyScript": "ssp/my-leave/modal-show-deduction-fields-expanded.js", + "user": "civihr_staff" + }, + { + "label": "SSP / My Leave / Calendar / Current Month", + "url": "{{siteUrl}}/my-leave#/my-leave/calendar", + "onReadyScript": "ssp/my-leave/calendar-current-month-visible.js", + "user": "civihr_staff" + }, + { + "label": "SSP / My Leave / Calendar / Tooltip", + "url": "{{siteUrl}}/my-leave#/my-leave/calendar", + "onReadyScript": "ssp/my-leave/calendar-tooltip.js", + "user": "civihr_staff" } ] } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json index 93a9f4fdfa2..295647f3cd1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-my-details.json @@ -1,11 +1,11 @@ { "scenarios": [ { - "label": "SSP - My Details", + "label": "SSP / My Details", "url": "{{siteUrl}}/hr-details" }, { - "label": "SSP - Edit My Details", + "label": "SSP / Edit My Details", "url": "{{siteUrl}}/hr-details", "onReadyScript": "ssp/edit-my-details.js" } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json similarity index 62% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json index 7f7a5360e87..582765c637c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/onboarding-wizard.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json @@ -1,48 +1,44 @@ { "scenarios": [ { - "label": "Features", - "url": "{{siteUrl}}/features-in-civihr" - }, - { - "label": "Customize Onboarding Wizard", + "label": "SSP / Onboarding Wizard / Customize SSP / Onboarding Wizard", "url": "{{siteUrl}}/customize-onboarding-wizard" }, { - "label": "Password Page", + "label": "SSP / Onboarding Wizard / Password", "url": "{{siteUrl}}/user/1/edit" }, { - "label": "Personal Details Page", + "label": "SSP / Onboarding Wizard / Personal Details", "url": "{{siteUrl}}/onboarding-form" }, { - "label": "Address Page", + "label": "SSP / Onboarding Wizard / Address", "url": "{{siteUrl}}/onboarding-form", "onReadyScript": "onboarding-wizard/address.js" }, { - "label": "Contact Page", + "label": "SSP / Onboarding Wizard / Contact Info", "url": "{{siteUrl}}/onboarding-form", "onReadyScript": "onboarding-wizard/contact.js" }, { - "label": "Payroll Page", + "label": "SSP / Onboarding Wizard / Payroll", "url": "{{siteUrl}}/onboarding-form", "onReadyScript": "onboarding-wizard/payroll.js" }, { - "label": "Emergency Contact Page", + "label": "SSP / Onboarding Wizard / Emergency Contact", "url": "{{siteUrl}}/onboarding-form", "onReadyScript": "onboarding-wizard/emergency_contact.js" }, { - "label": "Dependents Page", + "label": "SSP / Onboarding Wizard / Dependants", "url": "{{siteUrl}}/onboarding-form", "onReadyScript": "onboarding-wizard/dependents.js" }, { - "label": "Profile Picture Page", + "label": "SSP / Onboarding Wizard / Profile Picture", "url": "{{siteUrl}}/onboarding-form", "onReadyScript": "onboarding-wizard/profile_picture.js" } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json index 1a1d7433290..2236e5d1afb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json @@ -1,19 +1,19 @@ { "scenarios": [ { - "label": "SSP - Reports", + "label": "SSP / Reports", "url": "{{siteUrl}}/reports" }, { - "label": "SSP - Reports people", + "label": "SSP / Reports / People", "url": "{{siteUrl}}/reports/people/" }, { - "label": "SSP - Reports - Leave and Absence", + "label": "SSP / Reports / Leave and Absence", "url": "{{siteUrl}}/reports/leave_and_absence/" }, { - "label": "SSP - Reports - Age groups", + "label": "SSP / Reports / Settings / Age groups", "url": "{{siteUrl}}/reports/settings/age_group/" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json index 83d0fb67d65..2ac1ea98d29 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-staff-directory.json @@ -1,7 +1,7 @@ { "scenarios": [ { - "label": "SSP - Staff Directory", + "label": "SSP / Staff Directory", "url": "{{siteUrl}}/staff-directory" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json index 97906e6ad81..d6e071e383e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json @@ -1,16 +1,16 @@ { "scenarios": [ { - "label": "SSP - Tasks", + "label": "SSP / Tasks", "url": "{{siteUrl}}/tasks-and-documents" }, { - "label": "SSP - Tasks - Show Completed tasks", + "label": "SSP / Tasks / Show Completed tasks", "url": "{{siteUrl}}/tasks-and-documents", "onReadyScript": "ssp/tasks-show-completed-tasks.js" }, { - "label": "SSP - Tasks - Create new tasks", + "label": "SSP / Tasks / Create new tasks", "url": "{{siteUrl}}/tasks-and-documents", "onReadyScript": "ssp/tasks-create-new-task.js", "user": "admin" From 78fd6a173a42fb6c4118715f9b161df31a2f1bcf Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 23 Mar 2018 12:09:38 +0100 Subject: [PATCH 057/251] PCHR-3221: Misc cleanup --- .../backstop_data/page-objects/ssp-hr-resources.js | 2 +- .../backstop_data/page-objects/ssp-my-details.js | 2 +- .../backstop_data/page-objects/ssp-tasks.js | 2 +- .../backstop_data/page-objects/ssp-vacancies.js | 2 +- .../scenarios/{ssp-la-my-report.json => ssp-la-my-leave.json} | 0 .../backstop_data/scenarios/ssp-onboarding-wizard.json | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) rename uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/{ssp-la-my-report.json => ssp-la-my-leave.json} (100%) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js index 492caa0f2fd..50a69e7ffc1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js @@ -1,4 +1,4 @@ -var modal = require('./../page'); +var modal = require('./page'); module.exports = modal.extend({ /** diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js index e982a0803f2..298b710f4ac 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js @@ -1,4 +1,4 @@ -var modal = require('./../page'); +var modal = require('./page'); module.exports = modal.extend({ /** diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js index 87b7b6719b8..a4055ac42cb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js @@ -1,4 +1,4 @@ -var modal = require('../page'); +var modal = require('./page'); module.exports = modal.extend({ /** diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js index 5b83262e2c5..bb4ee6b4454 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js @@ -1,4 +1,4 @@ -var modal = require('./../page'); +var modal = require('./page'); module.exports = modal.extend({ /** diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave.json similarity index 100% rename from uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-report.json rename to uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-my-leave.json diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json index 582765c637c..62d961e18af 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json @@ -1,7 +1,7 @@ { "scenarios": [ { - "label": "SSP / Onboarding Wizard / Customize SSP / Onboarding Wizard", + "label": "SSP / Onboarding Wizard / Customize SSP", "url": "{{siteUrl}}/customize-onboarding-wizard" }, { From 8e0c393eda884cf0f826dbe1abf763c6d78fd02f Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 23 Mar 2018 17:20:10 +0100 Subject: [PATCH 058/251] PCHR-3221: Refactor backstopjs.js --- .../gulp/tasks/backstopjs.js | 170 ++++++++++-------- 1 file changed, 92 insertions(+), 78 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 988a3db7feb..c8a28a241f3 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -13,12 +13,13 @@ var Promise = require('es6-promise').Promise; var utils = require('../utils'); -var BACKSTOP_DIR = 'backstop_data/'; -var BACKSTOP_DIR_PATH = path.join(__dirname, '..', '..', BACKSTOP_DIR); +var BACKSTOP_DIR = path.join(__dirname, '..', '..', 'backstop_data'); var DEFAULT_USER = 'civihr_admin'; -var FILES = { siteConfig: 'site-config.json', tpl: 'backstop.tpl.json' }; -var CONFIG_TPL = { - 'url': 'http://%{site-host}' +var CONFIG_TPL = { 'url': 'http://%{site-host}' }; +var FILES = { + siteConfig: path.join(BACKSTOP_DIR, 'site-config.json'), + temp: path.join(BACKSTOP_DIR, 'backstop.temp.json'), + tpl: path.join(BACKSTOP_DIR, 'backstop.tpl.json') }; module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (action) { @@ -30,6 +31,55 @@ module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (ac }; }); +/** + * Concatenates all the scenarios (if no specific scenario file is specified) + * + * @param {Object} contactIdsByRoles + * @return {Array} + */ +function buildScenariosList (contactIdsByRoles) { + var config = siteConfig(); + var dirPath = path.join(BACKSTOP_DIR, 'scenarios'); + + return _(fs.readdirSync(dirPath)) + .filter(function (scenario) { + return argv.configFile ? scenario === argv.configFile : true && scenario.endsWith('.json'); + }) + .map(function (scenarioFile) { + var scenarioPath = path.join(dirPath, scenarioFile); + + return JSON.parse(fs.readFileSync(scenarioPath)).scenarios; + }) + .flatten() + .map(function (scenario, index, scenarios) { + var user = scenario.user || DEFAULT_USER; + + return _.assign(scenario, { + cookiePath: path.join(BACKSTOP_DIR, 'cookies', user + '.json'), + count: '(' + (index + 1) + ' of ' + scenarios.length + ')', + url: constructScenarioUrl(config.url, scenario.url, contactIdsByRoles) + }); + }) + .value(); +} + +/** + * Removes the temp config file and sends a notification + * based on the given outcome from BackstopJS + * + * @param {Boolean} success + */ +function cleanUpAndNotify (success) { + gulp + .src(FILES.temp, { read: false }) + .pipe(clean()) + .pipe(notify({ + message: success ? 'Success' : 'Error', + title: 'BackstopJS', + sound: 'Beep' + })); +} + /** * Constructs URL for BackstopJS scenario based on * site URL, scenario config URL and contact "roles" and IDs map @@ -39,7 +89,7 @@ module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (ac * @param {Object} contactIdsByRoles * @return {String} */ -function constructBackstopJSScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles) { +function constructScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles) { return scenarioUrl .replace('{{siteUrl}}', siteUrl) .replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, contactRole) { @@ -48,7 +98,26 @@ function constructBackstopJSScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles } /** - * Fetches civicrm contacts who's emails match "civihr_" pattern + * Creates the content of the config temporary file that will be fed to BackstopJS + * The content is the mix of the config template and the list of scenarios + * under the scenarios/ folder + * + * @return {String} + */ +function createTempConfigFile () { + var content = JSON.parse(fs.readFileSync(FILES.tpl)); + + return getRolesAndIDs() + .then(buildScenariosList) + .then(function (scenarios) { + content.scenarios = scenarios; + + return JSON.stringify(content); + }); +} + +/** + * Fetches civicrm contacts whose emails match "civihr_" pattern * and returns a map of their "roles" connected to their IDs. * Requires 'civihr_(staff|manager|admin)@...' to be presented in DB, * otherwise will throw an error. @@ -96,45 +165,35 @@ function getRolesAndIDs () { * @return {Promise} */ function runBackstopJS (command) { - var destFile = 'backstop.temp.json'; - if (touchSiteConfigFile()) { utils.throwError( 'No site-config.json file detected!\n' + - '\tOne has been created for you under ' + BACKSTOP_DIR + '\n' + + '\tOne has been created for you under ' + path.basename(BACKSTOP_DIR) + '/\n' + '\tPlease insert the real value for each placeholder and try again' ); } return writeCookies() - .then(getRolesAndIDs) - .then(function (contactIdsByRoles) { + .then(createTempConfigFile) + .then(function (tempConfigFile) { return new Promise(function (resolve, reject) { - var isBackstopJSSuccessful; + var success = false; - gulp.src(BACKSTOP_DIR_PATH + FILES.tpl) - .pipe(file(destFile, tempFileContent(contactIdsByRoles))) - .pipe(gulp.dest(BACKSTOP_DIR_PATH)) + gulp.src(FILES.tpl) + .pipe(file(path.basename(FILES.temp), tempConfigFile)) + .pipe(gulp.dest(BACKSTOP_DIR)) .on('end', function () { backstopjs(command, { - configPath: BACKSTOP_DIR_PATH + destFile, + configPath: FILES.temp, filter: argv.filter }) .then(function () { - isBackstopJSSuccessful = true; + success = true; }) .catch(_.noop).then(function () { // equivalent to .finally() - return gulp - .src(BACKSTOP_DIR_PATH + destFile, { read: false }) - .pipe(clean()) - .pipe(notify({ - message: isBackstopJSSuccessful ? 'Successful' : 'Error', - title: 'BackstopJS', - sound: 'Beep' - })); - }) - .then(function () { - isBackstopJSSuccessful ? resolve() : reject(new Error('BackstopJS error')); + cleanUpAndNotify(success); + + success ? resolve() : reject(new Error('BackstopJS error')); }); }); }); @@ -144,58 +203,13 @@ function runBackstopJS (command) { }); } -/** - * Concatenates all the scenarios (if no specific scenario file is specified) - * - * @param {Object} contactIdsByRoles - * @return {Array} - */ -function scenariosList (contactIdsByRoles) { - var config = siteConfig(); - var scenariosPath = BACKSTOP_DIR_PATH + 'scenarios/'; - - return _(fs.readdirSync(scenariosPath)) - .filter(function (scenario) { - return argv.configFile ? scenario === argv.configFile : true && scenario.endsWith('.json'); - }) - .map(function (scenarioFile) { - return JSON.parse(fs.readFileSync(scenariosPath + scenarioFile)).scenarios; - }) - .flatten() - .map(function (scenario, index, scenarios) { - var user = scenario.user || DEFAULT_USER; - - return _.assign(scenario, { - cookiePath: path.join(BACKSTOP_DIR, 'cookies', user + '.json'), - count: '(' + (index + 1) + ' of ' + scenarios.length + ')', - url: constructBackstopJSScenarioUrl(config.url, scenario.url, contactIdsByRoles) - }); - }) - .value(); -} - /** * Returns the content of site config file * * @return {Object} */ function siteConfig () { - return JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.siteConfig)); -} - -/** - * Creates the content of the config temporary file that will be fed to BackstopJS - * The content is the mix of the config template and the list of scenarios - * under the scenarios/ folder - * - * @return {String} - */ -function tempFileContent (contactIdsByRoles) { - var content = JSON.parse(fs.readFileSync(BACKSTOP_DIR_PATH + FILES.tpl)); - - content.scenarios = scenariosList(contactIdsByRoles); - - return JSON.stringify(content); + return JSON.parse(fs.readFileSync(FILES.siteConfig)); } /** @@ -207,9 +221,9 @@ function touchSiteConfigFile () { var created = false; try { - fs.readFileSync(BACKSTOP_DIR_PATH + FILES.siteConfig); + fs.readFileSync(FILES.siteConfig); } catch (err) { - fs.writeFileSync(BACKSTOP_DIR_PATH + FILES.siteConfig, JSON.stringify(CONFIG_TPL, null, 2)); + fs.writeFileSync(FILES.siteConfig, JSON.stringify(CONFIG_TPL, null, 2)); created = true; } @@ -235,7 +249,7 @@ function writeCookies () { return Promise.all(users.map(function (user) { return new Promise(function (resolve, reject) { - var cookieFilePath = path.join(BACKSTOP_DIR_PATH, 'cookies', user + '.json'); + var cookieFilePath = path.join(BACKSTOP_DIR, 'cookies', user + '.json'); if (fs.existsSync(cookieFilePath)) { fs.unlinkSync(cookieFilePath); From 82f6a0bc1ceb206d3fecdadd4fc74bd530d68e79 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 23 Mar 2018 17:23:54 +0100 Subject: [PATCH 059/251] PCHR-3221: Create cookies folder if it does not exist --- uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index c8a28a241f3..9ce2964f8ce 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -243,13 +243,18 @@ function touchSiteConfigFile () { * @return {Promise} */ function writeCookies () { + var cookiesDir = path.join(BACKSTOP_DIR, 'cookies'); var port = 9222; var config = siteConfig(); var users = ['admin', 'civihr_admin', 'civihr_manager', 'civihr_staff']; + if (!fs.existsSync(cookiesDir)) { + fs.mkdirSync(cookiesDir); + } + return Promise.all(users.map(function (user) { return new Promise(function (resolve, reject) { - var cookieFilePath = path.join(BACKSTOP_DIR, 'cookies', user + '.json'); + var cookieFilePath = path.join(cookiesDir, user + '.json'); if (fs.existsSync(cookieFilePath)) { fs.unlinkSync(cookieFilePath); From 2ddaf62a4436dd770143623f8a91b8c0229d71e1 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Sat, 24 Mar 2018 08:30:23 +0100 Subject: [PATCH 060/251] PCHR-3221: Begin implementation of puppetter --- .../backstop_data/backstop.tpl.json | 7 +- .../engine_scripts/clickAndHoverHelper.js | 17 ++-- .../engine_scripts/loadCookies.js | 16 +++- .../backstop_data/engine_scripts/onBefore.js | 7 +- .../backstop_data/engine_scripts/onReady.js | 7 +- .../backstop_data/page-objects/page.js | 88 +++++++++---------- 6 files changed, 71 insertions(+), 71 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json index 901999ffa99..a2a0a1b1025 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json @@ -16,12 +16,13 @@ "ci_report": "backstop_data/ci_report" }, "report": ["browser"], - "engine": "chrome", + "engine": "puppet", "engineFlags": [], "engineOptions": { - "waitTimeout": 12000 + "waitTimeout": 20000, + "ignoreHTTPSErrors": true }, - "asyncCaptureLimit": 1, + "asyncCaptureLimit": 7, "asyncCompareLimit": 50, "debug": false, "debugWindow": false diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js index fb874283b97..942bf059d91 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/clickAndHoverHelper.js @@ -1,24 +1,19 @@ -module.exports = function (chromy, scenario) { +module.exports = async (puppet, scenario) => { var hoverSelector = scenario.hoverSelector; var clickSelector = scenario.clickSelector; var postInteractionWait = scenario.postInteractionWait; // selector [str] | ms [int] if (hoverSelector) { - chromy - .wait(hoverSelector) - .rect(hoverSelector) - .result(function (rect) { - chromy.mouseMoved(rect.left, rect.top); - }); + await puppet.waitFor(hoverSelector); + await puppet.hover(hoverSelector); } if (clickSelector) { - chromy - .wait(clickSelector) - .click(clickSelector); + await puppet.waitFor(clickSelector); + await puppet.click(clickSelector); } if (postInteractionWait) { - chromy.wait(postInteractionWait); + await puppet.waitFor(postInteractionWait); } }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js index c16ef5503d0..54faa5f29f7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/loadCookies.js @@ -1,6 +1,6 @@ var fs = require('fs'); -module.exports = function (chromy, scenario) { +module.exports = async (puppet, scenario) => { var cookies = []; var cookiePath = scenario.cookiePath; @@ -9,13 +9,21 @@ module.exports = function (chromy, scenario) { cookies = JSON.parse(fs.readFileSync(cookiePath)); } - // MUNGE COOKIE DOMAIN FOR CHROMY USAGE + // MUNGE COOKIE DOMAIN cookies = cookies.map(cookie => { cookie.url = 'http://' + cookie.domain; delete cookie.domain; return cookie; }); - // SET COOKIES VIA CHROMY - chromy.setCookie(cookies); + // SET COOKIES + const setCookies = async () => { + return Promise.all( + cookies.map(async (cookie) => { + await puppet.setCookie(cookie); + }) + ); + }; + + await setCookies(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js index 55914dfe650..93c6f3daa3d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onBefore.js @@ -1,9 +1,6 @@ -module.exports = function (chromy, scenario, vp) { +module.exports = async (puppet, scenario, vp) => { console.log('--------------------------------------------'); console.log('Running Scenario "' + scenario.label + '" ' + scenario.count); - require('./loadCookies')(chromy, scenario); - - // IGNORE ANY CERT WARNINGS - chromy.ignoreCertificateErrors(); + await require('./loadCookies')(puppet, scenario); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js index ad9647e3127..b0c0f884170 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js @@ -1,7 +1,6 @@ var page = require('../page-objects/page'); -module.exports = function (chromy, scenario, vp) { - require('./clickAndHoverHelper')(chromy, scenario); - - page.init(chromy); +module.exports = async (puppet, scenario, vp) => { + await require('./clickAndHoverHelper')(puppet, scenario); + await page.init(puppet); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index 8c813bb9649..bb63a90e9a0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -1,42 +1,38 @@ -var _ = require('lodash'); -var Promise = require('es6-promise').Promise; +const _ = require('lodash'); +const Promise = require('es6-promise').Promise; module.exports = { /** * Initializes the page and removes any code warnings from the page * - * @param {Object} chromy + * @param {Object} puppet * @param {Boolean} clearDialogs if true it will close modals and notifications * @return {Object} */ - init: function (chromy, clearDialogs) { + init: async (puppet, clearDialogs) => { clearDialogs = typeof clearDialogs !== 'undefined' ? !!clearDialogs : true; - this.chromy = chromy; - !!this.waitForReady && this.waitForReady(); - - chromy.evaluate(function () { - return document.location.href; - }) - .result(function (href) { - var isAdmin = href.indexOf('civicrm/') > 1; - - if (isAdmin) { - chromy.evaluate(function () { - var errorsWrapper = document.querySelector('#content > #console'); - errorsWrapper && (errorsWrapper.style.display = 'none'); - }); - } else { - chromy.evaluate(function () { - var errorsWrapper = document.querySelector('#messages .alert'); - errorsWrapper && (errorsWrapper.style.display = 'none'); - }); - } + this.puppet = puppet; + !!this.waitForReady && await this.waitForReady(); + + let href = await this.puppet.evaluate(() => document.location.href); + let isAdmin = href.indexOf('civicrm/') > 1; + + if (isAdmin) { + await this.puppet.evaluate(function () { + let errorsWrapper = document.querySelector('#content > #console'); + errorsWrapper && (errorsWrapper.style.display = 'none'); }); + } else { + await this.puppet.evaluate(function () { + let errorsWrapper = document.querySelector('#messages .alert'); + errorsWrapper && (errorsWrapper.style.display = 'none'); + }); + } if (clearDialogs) { - closeAnyModal.call(this); - closeNotifications.call(this); + await closeAnyModal.call(this); + await closeNotifications.call(this); } return this; @@ -49,7 +45,7 @@ module.exports = { * a collection of methods and properties that will extend the main page * @return {Object} */ - extend: function (page) { + extend: (page) => { return _.assign(Object.create(this), page); }, @@ -61,15 +57,15 @@ module.exports = { * @param {String} waitSelector * @return {Promise} */ - waitForModal: function (modalModule, waitSelector) { - var chromy = this.chromy; - - return new Promise(function (resolve) { - chromy.wait(waitSelector || '.modal'); - chromy.wait(300); + waitForModal: async (modalModule, waitSelector) => { + return new Promise(async resolve => { + await this.puppet.waitFor(waitSelector || '.modal'); + await this.puppet.wait(300); if (modalModule) { - resolve(require('./modals/' + modalModule).init(chromy, false)); + let modal = await require('./modals/' + modalModule).init(this.puppet, false); + + resolve(modal); } else { resolve(); } @@ -82,12 +78,14 @@ module.exports = { * * @return {Object} */ -function closeAnyModal () { - var openModalSelector = '.modal.in'; +async function closeAnyModal () { + const openModalSelector = '.modal.in'; - if (this.chromy.exists(openModalSelector)) { - this.chromy.click(openModalSelector + ' .close[ng-click="cancel()"]'); - this.chromy.wait(300); + let result = await this.puppet.$(openModalSelector); + + if (result) { + await this.puppet.click(openModalSelector + ' .close[ng-click="cancel()"]'); + await this.puppet.wait(300); } return this; @@ -98,12 +96,14 @@ function closeAnyModal () { * * @return {Object} */ -function closeNotifications () { - var notificationSelector = 'a.ui-notify-cross.ui-notify-close'; +async function closeNotifications () { + const notificationSelector = 'a.ui-notify-cross.ui-notify-close'; + + let result = await this.puppet.$(notificationSelector); - if (this.chromy.exists(notificationSelector)) { - this.chromy.click(notificationSelector); - this.chromy.wait(500); + if (result) { + await this.puppet.click(notificationSelector); + await this.puppet.wait(500); } return this; From 9e2d1c1d4eff57e5f0874c35002b276c5565cec3 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Sat, 24 Mar 2018 09:52:04 +0100 Subject: [PATCH 061/251] PCHR-3221: Use async/await in engine scripts --- .../contact-access-rights/open-ui-select.js | 12 +++++----- .../contact-access-rights/show.js | 7 +++--- .../contact-summary/absence/tab-calendar.js | 7 +++--- .../absence/tab-entitlements.js | 7 +++--- .../absence/tab-report-actions.js | 13 ++++++----- .../absence/tab-report-open-section.js | 12 +++++----- .../contact-summary/absence/tab-report.js | 7 +++--- .../absence/tab-work-patterns-modal.js | 12 +++++----- .../absence/tab-work-patterns.js | 7 +++--- .../contact-summary/documents/show.js | 7 +++--- .../job-contract/change-terms.js | 16 ++++++------- .../job-contract/correct-error.js | 16 ++++++------- .../job-contract/delete-dialog.js | 12 +++++----- .../job-contract/full-history.js | 12 +++++----- .../contact-summary/job-contract/summary.js | 7 +++--- .../job-contract/tab-funding.js | 16 ++++++------- .../job-contract/tab-general.js | 16 ++++++------- .../contact-summary/job-contract/tab-hours.js | 16 ++++++------- .../job-contract/tab-insurance.js | 16 ++++++------- .../contact-summary/job-contract/tab-leave.js | 16 ++++++------- .../contact-summary/job-contract/tab-pay.js | 16 ++++++------- .../job-contract/tab-pension.js | 16 ++++++------- .../contact-summary/job-roles/add-new.js | 12 +++++----- .../job-roles/basic-details-edit.js | 13 ++++++----- .../job-roles/basic-details.js | 7 +++--- .../job-roles/cost-centres-edit.js | 13 ++++++----- .../contact-summary/job-roles/cost-centres.js | 12 +++++----- .../job-roles/delete-dialog.js | 12 +++++----- .../contact-summary/job-roles/funding-edit.js | 13 ++++++----- .../contact-summary/job-roles/funding.js | 12 +++++----- .../job-roles/open-ui-select.js | 14 ++++++----- .../contact-summary/show-actions.js | 7 +++--- .../contact-summary/tasks/show.js | 7 +++--- .../documents/advanced-filters.js | 7 +++--- .../engine_scripts/documents/document/add.js | 7 +++--- .../documents/document/pick-due-date.js | 12 ++++++---- .../documents/document/select-assignee.js | 13 +++++++---- .../documents/document/select-type.js | 11 +++++---- .../documents/document/show-all-fields.js | 13 +++++++---- .../leave-absence-dashboard/import/step-2.js | 7 +++--- .../leave-absence-dashboard/import/step-3.js | 7 +++--- .../leave-absence-dashboard/import/step-4.js | 7 +++--- .../leave-balances/leave-balances.js | 7 +++--- .../leave-calendar/leave-calendar.js | 7 +++--- .../leave-requests-with-filters.js | 12 +++++----- .../leave-requests/leave-requests.js | 7 +++--- .../backstop_data/engine_scripts/onReady.js | 2 +- .../onboarding-wizard/address.js | 7 +++--- .../onboarding-wizard/contact.js | 7 +++--- .../onboarding-wizard/dependents.js | 7 +++--- .../onboarding-wizard/emergency_contact.js | 7 +++--- .../onboarding-wizard/payroll.js | 7 +++--- .../onboarding-wizard/profile_picture.js | 7 +++--- .../engine_scripts/ssp/edit-my-details.js | 7 +++--- .../ssp/hr-resources-see-resources.js | 7 +++--- .../manager-leave/calendar-all-contacts.js | 7 +++--- .../calendar-current-month-visible.js | 6 ++--- .../manager-leave/calendar-legend-expanded.js | 7 +++--- .../ssp/manager-leave/leave-balances.js | 6 ++--- .../leave-requests-as-admin-all-requests.js | 7 +++--- .../manager-leave/leave-requests-as-admin.js | 6 ++--- .../leave-requests-show-actions.js | 7 +++--- .../leave-requests-with-filters.js | 7 +++--- .../leave-requests-without-filters.js | 6 ++--- .../modal-leave-on-behalf-of-staff.js | 7 +++--- .../ssp/manager-leave/modal-sick-edit.js | 13 ++++++----- .../modal-sick-on-behalf-of-staff.js | 7 +++--- .../ssp/manager-leave/modal-toil-edit.js | 13 ++++++----- .../modal-toil-on-behalf-of-staff.js | 7 +++--- .../calendar-current-month-visible.js | 6 ++--- .../ssp/my-leave/calendar-tooltip.js | 7 +++--- .../modal-show-deduction-fields-expanded.js | 23 ++++++++++--------- .../my-leave/modal-show-deduction-fields.js | 19 +++++++-------- .../my-leave/report-pending-show-comments.js | 16 ++++++------- .../my-leave/report-show-absence-in-hours.js | 11 +++++---- .../engine_scripts/ssp/my-leave/report.js | 7 +++--- .../ssp/tasks-create-new-task.js | 7 +++--- .../ssp/tasks-show-completed-tasks.js | 7 +++--- .../ssp/vacancies-more-details.js | 7 +++--- .../engine_scripts/tasks/advanced-filters.js | 7 +++--- .../tasks/assignment/add-document.js | 12 ++++++---- .../tasks/assignment/add-task.js | 12 ++++++---- .../engine_scripts/tasks/assignment/add.js | 7 +++--- .../tasks/assignment/pick-date.js | 11 +++++---- .../tasks/assignment/select-type.js | 11 +++++---- .../engine_scripts/tasks/select-dates.js | 7 +++--- .../engine_scripts/tasks/task/actions.js | 7 +++--- .../engine_scripts/tasks/task/add.js | 7 +++--- .../tasks/task/editable-assigned.js | 7 +++--- .../tasks/task/editable-date.js | 7 +++--- .../tasks/task/editable-subject.js | 7 +++--- .../tasks/task/editable-target.js | 7 +++--- .../engine_scripts/tasks/task/open.js | 7 +++--- .../engine_scripts/tasks/task/pick-date.js | 11 +++++---- .../tasks/task/select-assignee.js | 12 ++++++---- .../engine_scripts/tasks/task/select-type.js | 11 +++++---- .../tasks/task/show-all-fields.js | 18 +++++++-------- .../engine_scripts/tasks/task/show-more.js | 7 +++--- .../engine_scripts/tasks/task/task.js | 6 ++--- .../work-patterns/show-calendar-form.js | 7 +++--- 100 files changed, 515 insertions(+), 452 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js index a94bc167455..d82bb552487 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/open-ui-select.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../page-objects/contact-summary'); +const pageObj = require('../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openManageRightsModal() - .then(function (modal) { - modal.openDropdown('locations'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.openManageRightsModal(); + + await modal.openDropdown('locations'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js index 7e75965376d..626f4c60007 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/contact-summary'); +const pageObj = require('../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openManageRightsModal(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openManageRightsModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js index fe78ce012ba..3018a14ce73 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('calendar'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openSubTab('calendar'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js index d8d9ce0a9f1..3117bcf34db 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('entitlements'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openSubTab('entitlements'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js index 647fc8194cf..d25815324ac 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-actions.js @@ -1,10 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('report') - .then(function (reportTab) { - reportTab.openSection('pending').showActions(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openSubTab('report'); + + await tab.openSection('pending'); + await tab.showActions(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js index afa21d405df..8472106ee6f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report-open-section.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('report') - .then(function (reportTab) { - reportTab.openSection('pending'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openSubTab('report'); + + await tab.openSection('pending'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js index 5adfe26c545..71474b75709 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('report'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openSubTab('report'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js index f36ae0178a6..d0b60688dfd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns-modal.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('work-patterns') - .then(function (workPatternsTab) { - workPatternsTab.showModal(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openSubTab('work-patterns'); + + await tab.showModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js index c34d943bbc1..1688c04a07d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tabs/absence'); +const pageObj = require('../../../page-objects/tabs/absence'); -module.exports = function (engine) { - page.init(engine).openSubTab('work-patterns'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openSubTab('work-patterns'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js index 29435e11f4d..89084fa61ef 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('documents'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('documents'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js index 2e1a40d780d..59f2996d8c8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openContractModal('revision'); - }) - .then(function (modal) { - modal.selectTab('General'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openContractModal('revision'); + + await modal.selectTab('General'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js index af4fc737916..19ce08cc4b9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openContractModal('correct'); - }) - .then(function (modal) { - modal.selectTab('General'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openContractModal('correct'); + + await modal.selectTab('General'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js index e33d92d1df2..9e849295544 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - tab.attemptDelete(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + + await tab.attemptDelete(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js index c5dc37ae205..0a757beba3f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - tab.showFullHistory(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + + await tab.showFullHistory(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js index 527afbf32d8..15b4cc3f03f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('job-contract'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js index 15f9a456a82..c63bf7d1fc5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Funding'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('Funding'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js index c45c816986a..fdb5dd27d2a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('General'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('General'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js index 1d4fea6a42b..e15a0bc6b6a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Hours'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('Hours'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js index c067affb4b2..3fcf9857275 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Insurance'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('Insurance'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js index 1539d809fbe..618476615c6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Leave'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('Leave'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js index e7d3934860e..f8fef6a6a24 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Pay'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('Pay'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js index 908a79bdc87..2b166fcc387 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js @@ -1,13 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) - .then(function (modal) { - modal.selectTab('Pension'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-contract'); + const modal = await tab.openNewContractModal(); + + await modal.selectTab('Pension'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js index 603af011d6f..52b82e7025e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.showAddNew(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.showAddNew(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js index 89dc94b870d..320df9c70e1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js @@ -1,10 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.switchToTab('Basic Details'); + await tab.edit(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js index 158686d060e..eab038f9502 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('job-roles'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js index 6b2d0df72ee..85fe954ec4f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js @@ -1,10 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres').edit(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.switchToTab('Cost Centres'); + await tab.edit(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js index 3cdc7419c8a..3e792458163 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.switchToTab('Cost Centres'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js index 2054a95e913..be8d2880fcc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.attemptDelete(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.attemptDelete(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js index 9ae694b5543..b36adb9f252 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js @@ -1,10 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding').edit(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.switchToTab('Funding'); + await tab.edit(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js index 7b545369169..5dd0cfb10f7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.switchToTab('Funding'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js index 0ce0afad5d7..9773a00df02 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js @@ -1,10 +1,12 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit().openDropdown('department'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('job-roles'); + + await tab.switchToTab('Basic Details'); + await tab.edit(); + await tab.openDropdown('department'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js index a096bd1298c..7eb0091927b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/contact-summary'); +const pageObj = require('../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).showActions(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showActions(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js index 228694b7341..34adc69d63a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +const pageObj = require('../../../page-objects/contact-summary'); -module.exports = function (engine) { - page.init(engine).openTab('tasks'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('tasks'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js index b122224beb7..4d6f80240cb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/documents'); +const pageObj = require('../../page-objects/documents'); -module.exports = function (engine) { - page.init(engine).advancedFilters(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.advancedFilters(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js index 0985de92e71..4d5b7955c78 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/documents'); +const pageObj = require('../../../page-objects/documents'); -module.exports = function (engine) { - page.init(engine).addDocument(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.addDocument(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js index 5ac08b6e301..017a2bb4d96 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/pick-due-date.js @@ -1,9 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/documents'); +const pageObj = require('../../../page-objects/documents'); -module.exports = function (engine) { - page.init(engine).addDocument().then(function (modal) { - modal.showTab('Assignments').pickDueDate(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addDocument(); + + await modal.showTab('Assignments'); + await modal.pickDueDate(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js index d6d5c0a07bc..956afb786d8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-assignee.js @@ -1,9 +1,12 @@ 'use strict'; -var page = require('../../../page-objects/documents'); +const pageObj = require('../../../page-objects/documents'); -module.exports = function (engine) { - page.init(engine).addDocument().then(function (modal) { - modal.showTab('Assignments').showField('Assignee').selectAssignee(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addDocument(); + + await modal.showTab('Assignments'); + await modal.showField('Assignee'); + await modal.selectAssignee(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js index 4ae4812a932..8ed035396a6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/select-type.js @@ -1,9 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/documents'); +const pageObj = require('../../../page-objects/documents'); -module.exports = function (engine) { - page.init(engine).addDocument().then(function (modal) { - modal.selectType(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addDocument(); + + await modal.selectType(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js index 5ceb8d16858..3efcfdd4cc6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/show-all-fields.js @@ -1,9 +1,12 @@ 'use strict'; -var page = require('../../../page-objects/documents'); +const pageObj = require('../../../page-objects/documents'); -module.exports = function (engine) { - page.init(engine).addDocument().then(function (modal) { - modal.showTab('Assignments').showField('Assignee').showField('Assignment'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addDocument(); + + await modal.showTab('Assignments'); + await modal.showField('Assignee'); + await modal.showField('Assignment'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js index ea246afb99b..e6876ec23e3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-import'); +const pageObj = require('../../../page-objects/leave-absence-import'); -module.exports = function (engine) { - page.init(engine).showStep2(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showStep2(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js index 9bc2b5d6530..6f5b6a57aa0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-import'); +const pageObj = require('../../../page-objects/leave-absence-import'); -module.exports = function (engine) { - page.init(engine).showStep3(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showStep3(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js index e0ab2190493..0ae5c4dacfe 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-import'); +const pageObj = require('../../../page-objects/leave-absence-import'); -module.exports = function (engine) { - page.init(engine).showStep4(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showStep4(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js index 6f85282fab4..87b35db5eb0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-dashboard'); +const pageObj = require('../../../page-objects/leave-absence-dashboard'); -module.exports = function (engine) { - page.init(engine).openTab('leave-balances'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('leave-balances'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js index ce1350ec778..b14f107786c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-dashboard'); +const pageObj = require('../../../page-objects/leave-absence-dashboard'); -module.exports = function (engine) { - page.init(engine).openTab('leave-calendar'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('leave-calendar'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js index 2b96394e449..3bc8ae09528 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests-with-filters.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-dashboard'); +const pageObj = require('../../../page-objects/leave-absence-dashboard'); -module.exports = function (engine) { - page.init(engine).openTab('leave-requests') - .then(function (requestTab) { - requestTab.showFilters(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const tab = await page.openTab('leave-requests'); + + await tab.showFilters(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js index bf621be0763..4e8fd22502f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/leave-absence-dashboard'); +const pageObj = require('../../../page-objects/leave-absence-dashboard'); -module.exports = function (engine) { - page.init(engine).openTab('leave-requests'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTab('leave-requests'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js index b0c0f884170..d77d091b35f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onReady.js @@ -1,4 +1,4 @@ -var page = require('../page-objects/page'); +const page = require('../page-objects/page'); module.exports = async (puppet, scenario, vp) => { await require('./clickAndHoverHelper')(puppet, scenario); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js index 793f1ad0f5e..926597d5321 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/onboarding-wizard'); +const pageObj = require('../../page-objects/onboarding-wizard'); -module.exports = function (engine) { - page.init(engine).reachAddressPage(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.reachAddressPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js index 4ee448d0a18..06f898d3400 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/onboarding-wizard'); +const pageObj = require('../../page-objects/onboarding-wizard'); -module.exports = function (engine) { - page.init(engine).reachContactInfoPage(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.reachContactInfoPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js index a8cca5cbe65..485b48d9dc1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/onboarding-wizard'); +const pageObj = require('../../page-objects/onboarding-wizard'); -module.exports = function (engine) { - page.init(engine).reachDependentPage(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.reachDependentPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js index 01ff7856436..6644868825e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/onboarding-wizard'); +const pageObj = require('../../page-objects/onboarding-wizard'); -module.exports = function (engine) { - page.init(engine).reachEmergencyContactPage(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.reachEmergencyContactPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js index 2d1956636ec..82432f5f2df 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/onboarding-wizard'); +const pageObj = require('../../page-objects/onboarding-wizard'); -module.exports = function (engine) { - page.init(engine).reachPayrollPage(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.reachPayrollPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js index 23c2099cfd2..c40d0c2a786 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/onboarding-wizard'); +const pageObj = require('../../page-objects/onboarding-wizard'); -module.exports = function (engine) { - page.init(engine).reachProfilePicturePage(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.reachProfilePicturePage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js index 7b0e4e3a512..d51c2b5fd32 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/ssp-my-details'); +const pageObj = require('../../page-objects/ssp-my-details'); -module.exports = function (engine) { - page.init(engine).showEditMyDetailsPopup(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showEditMyDetailsPopup(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js index 879ab5e6e72..8e5cbfdb04b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/ssp-hr-resources'); +const pageObj = require('../../page-objects/ssp-hr-resources'); -module.exports = function (engine) { - page.init(engine).seeResources(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.seeResources(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js index 733f99d5646..11272b8df43 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); -module.exports = function (engine) { - page.init(engine).toggleContactsWithLeaves(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.toggleContactsWithLeaves(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js index de197d73b10..5110c5a167d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-current-month-visible.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); -module.exports = function (engine) { - page.init(engine); +module.exports = async engine => { + await pageObj.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js index 5f4fa95827c..ddaa26b509b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-calendar'); -module.exports = function (engine) { - page.init(engine).toggleLegend(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.toggleLegend(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js index becd944302c..c13e0da7f02 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-balances.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-balance-report'); -module.exports = function (engine) { - page.init(engine); +module.exports = async engine => { + await pageObj.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js index 684a7d934a6..4ca69d961b2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js @@ -1,9 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of Admin // and have at least one leave request *assigned* to the Admin -module.exports = function (engine) { - page.init(engine).changeFilterByAssignee('all'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.changeFilterByAssignee('all'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js index 563d7c02cbc..d8e4da9d103 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin.js @@ -1,9 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of Admin // and have at least one leave request *assigned* to the Admin -module.exports = function (engine) { - page.init(engine); +module.exports = async engine => { + await pageObj.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js index e366ce996e7..18f4c89b9dd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js @@ -1,8 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one leave request -module.exports = function (engine) { - page.init(engine).openActionsForRow(1); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openActionsForRow(1); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js index f8ad47f8324..bbf5e84b714 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js @@ -1,8 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one leave request -module.exports = function (engine) { - page.init(engine).expandFilter(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.expandFilter(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js index 4cffb2c47cb..699ff482571 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-without-filters.js @@ -1,8 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one leave request -module.exports = function (engine) { - page.init(engine); +module.exports = async engine => { + await pageObj.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js index cd8f1cb5f01..d973b936801 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js @@ -1,8 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager -module.exports = function (engine) { - page.init(engine).applyLeaveForStaff('leave'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.applyLeaveForStaff('leave'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js index 60efd698c6e..c70b3df7b03 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-edit.js @@ -1,11 +1,12 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +var pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one sickness request -module.exports = function (engine) { - page.init(engine) - .openLeaveTypeFor(3) - .openActionsForRow(1) - .editRequest(); +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.openLeaveTypeFor(3); + await page.openActionsForRow(1); + await page.editRequest(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js index 73f2ee507f9..8b6656b676b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js @@ -1,8 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager -module.exports = function (engine) { - page.init(engine).applyLeaveForStaff('sickness'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.applyLeaveForStaff('sickness'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js index 3c18c0e76b3..56e636302b0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-edit.js @@ -1,11 +1,12 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager and have at least one toil request -module.exports = function (engine) { - page.init(engine) - .openLeaveTypeFor(2) - .openActionsForRow(1) - .editRequest(); +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.openLeaveTypeFor(2); + await page.openActionsForRow(1); + await page.editRequest(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js index 251357fb8ae..e9ff7b60306 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js @@ -1,8 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); +const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave-requests'); // precondition: need to have the login of manager -module.exports = function (engine) { - page.init(engine).applyLeaveForStaff('toil'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.applyLeaveForStaff('toil'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js index 2fd312ed915..182e9500f78 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-current-month-visible.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); -module.exports = function (engine) { - page.init(engine); +module.exports = async engine => { + await pageObj.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js index e19461e68fc..48d7709996a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-calendar'); -module.exports = function (engine) { - page.init(engine).showTooltip(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showTooltip(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js index 8b0ab4fee19..1df0e594db9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields-expanded.js @@ -1,16 +1,17 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have a current absence period -module.exports = function (engine) { - page.init(engine) - .newRequest('leave') - .selectRequestAbsenceType('Holiday in Hours') - .changeRequestDaysMode('multiple') - .selectRequestDate('from', 2, 1) - .selectRequestDate('to', 2, 2) - .waitUntilRequestBalanceIsCalculated() - .expandDeductionField('from') - .expandDeductionField('to'); +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.newRequest('leave'); + await page.selectRequestAbsenceType('Holiday in Hours'); + await page.changeRequestDaysMode('multiple'); + await page.selectRequestDate('from', 2, 1); + await page.selectRequestDate('to', 2, 2); + await page.waitUntilRequestBalanceIsCalculated(); + await page.expandDeductionField('from'); + await page.expandDeductionField('to'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js index 341d64c27e1..8133d0736ba 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/modal-show-deduction-fields.js @@ -1,14 +1,15 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have a current absence period -module.exports = function (engine) { - page.init(engine) - .newRequest('leave') - .selectRequestAbsenceType('Holiday in Hours') - .changeRequestDaysMode('multiple') - .selectRequestDate('from', 2, 1) - .selectRequestDate('to', 2, 2) - .waitUntilRequestBalanceIsCalculated(); +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.newRequest('leave'); + await page.selectRequestAbsenceType('Holiday in Hours'); + await page.changeRequestDaysMode('multiple'); + await page.selectRequestDate('from', 2, 1); + await page.selectRequestDate('to', 2, 2); + await page.waitUntilRequestBalanceIsCalculated(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js index 63c7e805a8b..054069ebe23 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-pending-show-comments.js @@ -1,13 +1,13 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have the first leave request on the pending list with at least a comment -module.exports = function (engine) { - page.init(engine) - .openSection('pending') - .openActionsForRow() - .editRequest().then(function (modal) { - modal.selectTab('Comments'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openSection('pending'); + await page.openActionsForRow(); + + const modal = await page.editRequest(); + await modal.selectTab('Comments'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js index 22e506f78d6..e503b0aaf4d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report-show-absence-in-hours.js @@ -1,10 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have the absence type in *hours* with a label "Holiday in Hours" -module.exports = function (engine) { - page.init(engine) - .newRequest('leave') - .selectRequestAbsenceType('Holiday in Hours'); +module.exports = async engine => { + const page = await pageObj.init(engine); + + await page.newRequest('leave'); + await page.selectRequestAbsenceType('Holiday in Hours'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js index 29a1740216f..84d86bcb5bf 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js @@ -1,8 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/ssp-leave-absences-my-leave-report'); +const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-report'); // precondition: need to have at least one pending leave request -module.exports = function (engine) { - page.init(engine).openSection('pending'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openSection('pending'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js index 20e2c7b3f3d..c713af819ef 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/ssp-tasks'); +const pageObj = require('../../page-objects/ssp-tasks'); -module.exports = function (engine) { - page.init(engine).openCreateNewTaskModal(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openCreateNewTaskModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js index 79a5b4027fb..9e9544a164f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/ssp-tasks'); +const pageObj = require('../../page-objects/ssp-tasks'); -module.exports = function (engine) { - page.init(engine).openCompletedTasksModal(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openCompletedTasksModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js index f63fc7f6a88..8b48acc8bb0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/ssp-vacancies'); +const pageObj = require('../../page-objects/ssp-vacancies'); -module.exports = function (engine) { - page.init(engine).showMoreDetails(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showMoreDetails(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js index 28fe080c517..62d0522aa90 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/tasks'); +const pageObj = require('../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).advancedFilters(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.advancedFilters(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js index 118bb28127c..6f271c5bee0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-document.js @@ -1,9 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addAssignment().then(function (modal) { - modal.selectType().addDocument(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addAssignment(); + + await modal.selectType(); + await modal.addDocument(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js index b6599b718c1..299c0256fa1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add-task.js @@ -1,9 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addAssignment().then(function (modal) { - modal.selectType().addTask(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addAssignment(); + + await modal.selectType(); + await modal.addTask(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js index 60a4aa34796..ac6db8b184d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addAssignment(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.addAssignment(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js index 65c152f58d9..9e0f6fb5f0f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/pick-date.js @@ -1,9 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addAssignment().then(function (modal) { - modal.pickDate(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addAssignment(); + + await modal.pickDate(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js index b3ca42ea3a6..71c10890abb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/select-type.js @@ -1,9 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addAssignment().then(function (modal) { - modal.selectType(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addAssignment(); + + await modal.selectType(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js index 006c967cb9d..fa3489e6450 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/tasks'); +const pageObj = require('../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).selectDates(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.selectDates(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js index 01b14c8051c..350705aec05 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).taskActions(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.taskActions(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js index 2ffc6c62991..903e8b5f901 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addTask(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.addTask(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js index 721c9b42364..b170cf7a68f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).inPlaceEdit('assigned'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.inPlaceEdit('assigned'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js index 638a1fdd4cf..83d06d15d2b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).inPlaceEdit('date'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.inPlaceEdit('date'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js index bbddec126b9..d2d70691a98 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).inPlaceEdit('subject'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.inPlaceEdit('subject'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js index aedc0dd59ac..1ec115d7769 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).inPlaceEdit('target'); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.inPlaceEdit('target'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js index 28650b46251..5072e5a0b9d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).openTask(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.openTask(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js index d9bdcdbf7fe..3c55f9abb5d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/pick-date.js @@ -1,9 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addTask().then(function (modal) { - modal.pickDate(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addTask(); + + await modal.pickDate(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js index 03b246d5d9c..2dc45f832cd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-assignee.js @@ -1,9 +1,11 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addTask().then(function (modal) { - modal.showField('Assignee').selectAssignee(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addTask(); + + await modal.showField('Assignee'); + await modal.selectAssignee(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js index 78be3f9b4e0..bec8543fddd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/select-type.js @@ -1,9 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addTask().then(function (modal) { - modal.selectType(); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addTask(); + + await modal.selectType(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js index 7dfe5feaf15..0dd6119265f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-all-fields.js @@ -1,13 +1,13 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).addTask().then(function (modal) { - modal - .showField('Subject') - .showField('Assignee') - .showField('Status') - .showField('Assignment'); - }); +module.exports = async engine => { + const page = await pageObj.init(engine); + const modal = await page.addTask(); + + await modal.showField('Subject'); + await modal.showField('Assignee'); + await modal.showField('Status'); + await modal.showField('Assignment'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js index 5e445f91122..e927a50493c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine).showMore(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showMore(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js index c311203bdf4..1a80dbf4b67 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/task.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/tasks'); +const pageObj = require('../../../page-objects/tasks'); -module.exports = function (engine) { - page.init(engine); +module.exports = async engine => { + await pageObj.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js index 9d5643ea16a..8e33e01c707 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js @@ -1,7 +1,8 @@ 'use strict'; -var page = require('../../page-objects/work-patterns-form'); +const pageObj = require('../../page-objects/work-patterns-form'); -module.exports = function (engine) { - page.init(engine).showCalendarForm(); +module.exports = async engine => { + const page = await pageObj.init(engine); + await page.showCalendarForm(); }; From 5509f748fb60e345680dba3aec983d91feb7bdb6 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Sun, 25 Mar 2018 09:25:05 +0200 Subject: [PATCH 062/251] PCHR-3221: Use puppetter in page objects --- .../page-objects/contact-summary.js | 44 ++---- .../backstop_data/page-objects/documents.js | 56 +++---- .../page-objects/leave-absence-dashboard.js | 18 +-- .../page-objects/leave-absence-import.js | 43 +++-- .../page-objects/modals/assignment.js | 42 ++--- .../modals/contact-access-rights.js | 12 +- .../page-objects/modals/document.js | 51 ++---- .../page-objects/modals/job-contract.js | 14 +- .../page-objects/modals/modal.js | 2 +- .../page-objects/modals/ssp-leave-request.js | 10 +- .../backstop_data/page-objects/modals/task.js | 41 ++--- .../page-objects/onboarding-wizard.js | 58 +++---- .../backstop_data/page-objects/page.js | 38 ++--- .../page-objects/ssp-hr-resources.js | 10 +- ...e-absences-manager-leave-balance-report.js | 6 +- ...p-leave-absences-manager-leave-calendar.js | 22 +-- ...p-leave-absences-manager-leave-requests.js | 77 ++++----- .../ssp-leave-absences-my-leave-calendar.js | 61 +++----- .../ssp-leave-absences-my-leave-report.js | 147 ++++++------------ .../page-objects/ssp-my-details.js | 11 +- .../backstop_data/page-objects/ssp-tasks.js | 20 +-- .../page-objects/ssp-vacancies.js | 12 +- .../page-objects/tabs/absence.js | 16 +- .../page-objects/tabs/absence/calendar.js | 4 +- .../page-objects/tabs/absence/entitlements.js | 20 +-- .../page-objects/tabs/absence/report.js | 20 +-- .../tabs/absence/work-patterns.js | 8 +- .../page-objects/tabs/documents.js | 12 +- .../page-objects/tabs/job-contract.js | 55 +++---- .../page-objects/tabs/job-roles.js | 44 ++---- .../page-objects/tabs/leave-balances.js | 2 +- .../page-objects/tabs/leave-calendar.js | 2 +- .../page-objects/tabs/leave-requests.js | 8 +- .../backstop_data/page-objects/tabs/tab.js | 7 +- .../backstop_data/page-objects/tabs/tasks.js | 2 +- .../backstop_data/page-objects/tasks.js | 96 +++++------- .../page-objects/work-patterns-form.js | 14 +- 37 files changed, 413 insertions(+), 692 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index cffbc225112..d9b6bb002a6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -1,49 +1,37 @@ -var Promise = require('es6-promise').Promise; -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** * Opens the "contact access rights" modal * - * @return {Promise} resolves with the modal page object + * @return {Object} the modal page object */ - openManageRightsModal: function () { - var chromy = this.chromy; + async openManageRightsModal () { + await this.showActions(); + await this.puppet.click('[data-contact-access-rights]'); + await this.puppet.waitFor('.spinner', { hidden: true }); - return new Promise(function (resolve) { - this.showActions(); - - chromy.click('[data-contact-access-rights]'); - chromy.wait(function () { - var dom = document.querySelector('.spinner'); - - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - resolve(this.waitForModal('contact-access-rights')); - }.bind(this)); + return this.waitForModal('contact-access-rights'); }, /** * Opens one of the contact summary tabs * - * @param {string} tabId - * @return {object} resolves with the tab page object + * @param {String} tabId + * @return {Pbject} resolves with the tab page object */ - openTab: function (tabId) { - return new Promise(function (resolve) { - var tab = require('./tabs/' + tabId); - this.chromy.click('[title="' + tab.tabTitle + '"]'); + async openTab (tabId) { + const tabObj = require('./tabs/' + tabId); + await this.puppet.click('[title="' + tabObj.tabTitle + '"]'); - resolve(tab.init(this.chromy, false)); - }.bind(this)); + return tabObj.init(this.puppet, false); }, /** * Shows the dropdown of the "Actions" button in the contact summary page */ - showActions: function () { - this.chromy.click('#crm-contact-actions-link'); - this.chromy.wait('#crm-contact-actions-list'); + async showActions () { + await this.puppet.click('#crm-contact-actions-link'); + await this.puppet.waitFor('#crm-contact-actions-list'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js index ee14f91b3fc..1bb4261c9ba 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js @@ -1,70 +1,62 @@ -var Promise = require('es6-promise').Promise; -var page = require('./page'); +const page = require('./page'); -var documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; +const documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; module.exports = page.extend({ /** * Opens the modal to add a documents * - * @return {Promise} resolves with the document modal page object + * @return {Object} the document modal page object */ - addDocument: function () { - return new Promise(function (resolve) { - this.chromy.click('a[ng-click*="itemAdd"]'); - resolve(this.waitForModal('document')); - }.bind(this)); + async addDocument () { + await this.puppet.click('a[ng-click*="itemAdd"]'); + + return this.waitForModal('document'); }, /** * Shows the advanced filters * - * @return {object} + * @return {Object} */ - advancedFilters: function () { - this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - this.chromy.wait(500); - - return this; + async advancedFilters () { + await this.puppet.click('a[ng-click*="isCollapsed.filterAdvanced"]'); + await this.puppet.waitFor(500); }, /** * Shows the dropdown of the actions available on any given document * - * @return {object} + * @return {Object} */ - documentActions: function () { - this.chromy.click(documentSelector + ' .ct-context-menu-toggle'); - - return this; + async documentActions () { + await this.puppet.click(documentSelector + ' .ct-context-menu-toggle'); }, /** * Opens a document * - * @return {Promise} resolves with the document modal page object + * @return {Object} the document modal page object */ - openDocument: function () { - return new Promise(function (resolve) { - this.documentActions(); + async openDocument () { + await this.documentActions(); + await this.puppet.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); - this.chromy.click(documentSelector + ' .dropdown-menu a[ng-click*="modalDocument"]'); - resolve(this.waitForModal('document')); - }.bind(this)); + return this.waitForModal('document'); }, /** * Shows the "select dates" filter */ - selectDates: function () { - this.chromy.click('.ct-select-dates'); - this.chromy.wait(500); + async selectDates () { + await this.puppet.click('.ct-select-dates'); + await this.puppet.waitFor(500); }, /** * Waits until the specified select is visible on the page */ - waitForReady: function () { - this.chromy.waitUntilVisible('.ct-filter-date'); + async waitForReady () { + await this.puppet.waitFor('.ct-filter-date', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js index c5e2a9c21f3..434dd44686f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js @@ -1,5 +1,4 @@ -var Promise = require('es6-promise').Promise; -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** @@ -8,16 +7,13 @@ module.exports = page.extend({ * @param {string} tabId * @return {object} resolves with the tab page object */ - openTab: function (tabId) { - var chromy = this.chromy; - var tab = require('./tabs/' + tabId).init(chromy, false); + async openTab (tabId) { + const tab = await require('./tabs/' + tabId).init(this.puppet, false); - return new Promise(function (resolve) { - chromy.click('[ui-sref="' + tab.tabUiSref + '"]'); - chromy.waitUntilVisible(tab.readySelector); - chromy.wait(500); + await this.puppet.click('[ui-sref="' + tab.tabUiSref + '"]'); + await this.puppet.waitFor(tab.readySelector, { visible: true }); + await this.puppet.waitFor(500); - resolve(tab); - }); + return tab; } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js index 43a330a25fc..00be3b17c5a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js @@ -1,5 +1,5 @@ -var path = require('path'); -var page = require('./page'); +const path = require('path'); +const page = require('./page'); module.exports = page.extend({ /** @@ -8,14 +8,13 @@ module.exports = page.extend({ * * @return Page instance. */ - showStep2: function () { - var filePath = path.join(__dirname, '..', 'uploads/leave-and-absences-import-data.csv'); + async showStep2 () { + const filePath = path.join(__dirname, '..', 'uploads/leave-and-absences-import-data.csv'); + const fileInput = await this.puppet.$('input[name="uploadFile"]'); - this.chromy.setFile('input[name="uploadFile"]', filePath); - this.chromy.check('#skipColumnHeader'); - this.submitAndWait(); - - return this; + await fileInput.uploadFile(filePath); + await this.puppet.click('[name="skipColumnHeader"]'); + await this.submitAndWait(); }, /** @@ -24,11 +23,9 @@ module.exports = page.extend({ * * @return Page instance. */ - showStep3: function () { - this.showStep2(); - this.submitAndWait(); - - return this; + async showStep3 () { + await this.showStep2(); + await this.submitAndWait(); }, /** @@ -37,25 +34,23 @@ module.exports = page.extend({ * * @return page instance. */ - showStep4: function () { - this.showStep3(); - this.submitAndWait(); - - return this; + async showStep4 () { + await this.showStep3(); + await this.submitAndWait(); }, /** * Clicks on next button (.validate) and waits for Step URL. */ - submitAndWait: function () { - this.chromy.click('.crm-leave-and-balance-import .validate'); - this.chromy.waitLoadEvent(); + async submitAndWait () { + await this.puppet.click('.crm-leave-and-balance-import .validate'); + await this.puppet.waitForNavigation({ waitUntil: 'domcontentloaded' }); }, /** * Waits until the import form is visible. */ - waitForReady: function () { - this.chromy.wait('.crm-leave-and-balance-import'); + async waitForReady () { + await this.puppet.waitFor('.crm-leave-and-balance-import'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js index 53bbe3387b4..62f3c20ef8a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js @@ -1,57 +1,41 @@ /* global jQuery */ -var modal = require('./modal'); +const modal = require('./modal'); module.exports = modal.extend({ /** * Clicks the "add document" button - * - * @return {object} */ - addDocument: function () { - this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); - - return this; + async addDocument () { + await this.puppet.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); }, /** * Clicks the "add task" button - * - * @return {object} */ - addTask: function () { - this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); - - return this; + async addTask () { + await this.puppet.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); }, /** * Opens a date picker - * - * @return {object} */ - pickDate: function () { - this.chromy.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); - this.chromy.waitUntilVisible('.uib-datepicker-popup'); - - return this; + async pickDate () { + await this.puppet.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); + await this.puppet.waitFor('.uib-datepicker-popup', { visible: true }); }, /** * Selects an assignment type, so that the rest of the modal is shown - * - * @return {object} */ - selectType: function () { - this.chromy.evaluate(function (modalRoot) { - var select = document.querySelector(modalRoot + ' select[name="assignment"]'); + async selectType () { + await this.puppet.evaluate(function (modalRoot) { + const select = document.querySelector(modalRoot + ' select[name="assignment"]'); select.selectedIndex = 2; jQuery(select).change(); - }, [this.modalRoot]); - this.chromy.wait(500); - - return this; + }, this.modalRoot); + await this.puppet.waitFor(500); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js index da61b5a71cd..4a51b96fb4c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js @@ -1,4 +1,4 @@ -var modal = require('./modal'); +const modal = require('./modal'); module.exports = modal.extend({ /** @@ -6,12 +6,10 @@ module.exports = modal.extend({ * * @return {object} */ - openDropdown: function (name) { - var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; + async openDropdown (name) { + const common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; - this.chromy.click(common.replace('%{name}', name)); - this.chromy.wait(100); - - return this; + await this.puppet.click(common.replace('%{name}', name)); + await this.puppet.waitFor(100); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js index 0db0f98c122..980832f98c7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js @@ -1,63 +1,44 @@ -var modal = require('./modal'); +const modal = require('./modal'); module.exports = modal.extend({ /** * Opens the "due date" datepicker - * - * @return {object} */ - pickDueDate: function () { - this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); - this.chromy.waitUntilVisible('.uib-datepicker-popup'); - - return this; + async pickDueDate () { + await this.puppet.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); + await this.puppet.waitFor('.uib-datepicker-popup', { visible: true }); }, /** * Shows the given field * - * @param {string} fieldName - * @return {object} + * @param {String} fieldName */ - showField: function (fieldName) { - this.chromy.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); - - return this; + async showField (fieldName) { + await this.puppet.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); }, /** * Selects an assignee for the document - * - * @return {object} */ - selectAssignee: function () { - this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; + async selectAssignee () { + await this.puppet.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); + await this.puppet.waitFor('.select2-with-searchbox:not(.select2-display-none)', { visible: true }); }, /** * Selects the type of document - * - * @return {object} */ - selectType: function () { - this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; + async selectType () { + await this.puppet.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); + await this.puppet.waitFor('.select2-with-searchbox:not(.select2-display-none)', { visible: true }); }, /** * Opens the given tab - * - * @return {object} */ - showTab: function (tabName) { - this.chromy.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); - this.chromy.wait(200); - - return this; + async showTab (tabName) { + await this.puppet.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); + await this.puppet.waitFor(200); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js index 22f77825a20..be1e88ae4ec 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js @@ -1,20 +1,18 @@ /* global XPathResult */ -var modal = require('./modal'); +const modal = require('./modal'); module.exports = modal.extend({ /** * Selects the tab with the given title - * - * @param {string} tabTitle */ - selectTab: function (tabTitle) { - this.chromy.evaluate(function (tabTitle) { + async selectTab (tabTitle) { + await this.puppet.evaluate(function (tabTitle) { // = clickLabel - var xPath = './/a[text()="' + tabTitle + '"]'; - var link = document.evaluate(xPath, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + const xPath = './/a[text()="' + tabTitle + '"]'; + const link = document.evaluate(xPath, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; link.click(); - }, [tabTitle]); + }, tabTitle); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js index 78a2f93d14c..1a25e1d0472 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/modal.js @@ -1,4 +1,4 @@ -var page = require('../page'); +const page = require('../page'); module.exports = page.extend({ modalRoot: '.modal' diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js index c178799d204..2198c29c4eb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js @@ -1,14 +1,12 @@ -var modal = require('./modal'); +const modal = require('./modal'); module.exports = modal.extend({ /** * Selects tabs like comments or attachments + * * @param {String} tabName like comments or attachments - * @return {Object} this object */ - selectTab: function (tabName) { - this.chromy.click('div.chr_leave-request-modal__tab li[heading=\'' + tabName + '\'] a'); - - return this; + async selectTab (tabName) { + await this.puppet.click('div.chr_leave-request-modal__tab li[heading=\'' + tabName + '\'] a'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js index 0ab85339afe..f4908472bf9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js @@ -1,51 +1,36 @@ -var modal = require('./modal'); +const modal = require('./modal'); module.exports = modal.extend({ /** * Opens a date picker - * - * @return {object} */ - pickDate: function () { - this.chromy.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); - this.chromy.waitUntilVisible('.uib-datepicker-popup'); - - return this; + async pickDate () { + await this.puppet.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); + await this.puppet.waitFor('.uib-datepicker-popup', { visible: true }); }, /** * Shows a given field * - * @param {string} fieldName - * @return {object} + * @param {String} fieldName */ - showField: function (fieldName) { - this.chromy.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); - - return this; + async showField (fieldName) { + await this.puppet.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); }, /** * Selects the task's assignee - * - * @return {object} */ - selectAssignee: function () { - this.chromy.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; + async selectAssignee () { + await this.puppet.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); + await this.puppet.waitFor('.select2-with-searchbox:not(.select2-display-none)', { visible: true }); }, /** * Select the task type - * - * @return {object} */ - selectType: function () { - this.chromy.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); - this.chromy.waitUntilVisible('.select2-with-searchbox:not(.select2-display-none)'); - - return this; + async selectType () { + await this.puppet.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); + await this.puppet.waitFor('.select2-with-searchbox:not(.select2-display-none)', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js index 62e96419db1..726bde29cb0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js @@ -1,4 +1,4 @@ -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** @@ -6,9 +6,9 @@ module.exports = page.extend({ * * @return {*} */ - reachAddressPage: function () { - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Address"]'); + async reachAddressPage () { + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Address"]'); }, /** @@ -16,10 +16,10 @@ module.exports = page.extend({ * * @return {*} */ - reachContactInfoPage: function () { - this.reachAddressPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Contact Info"]'); + async reachContactInfoPage () { + await this.reachAddressPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Contact Info"]'); }, /** @@ -27,10 +27,10 @@ module.exports = page.extend({ * * @return {*} */ - reachPayrollPage: function () { - this.reachContactInfoPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Payroll"]'); + async reachPayrollPage () { + await this.reachContactInfoPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Payroll"]'); }, /** @@ -38,10 +38,10 @@ module.exports = page.extend({ * * @return {*} */ - reachEmergencyContactPage: function () { - this.reachPayrollPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Emergency Contact"]'); + async reachEmergencyContactPage () { + await this.reachPayrollPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Emergency Contact"]'); }, /** @@ -49,11 +49,11 @@ module.exports = page.extend({ * * @return {*} */ - reachDependentPage: function () { - this.reachEmergencyContactPage(); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Dependants"]'); - this.chromy.click('#edit-submitted-do-you-have-dependants-1'); + async reachDependentPage () { + await this.reachEmergencyContactPage(); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Dependants"]'); + await this.puppet.click('#edit-submitted-do-you-have-dependants-1'); }, /** @@ -61,13 +61,13 @@ module.exports = page.extend({ * * @return {*} */ - reachProfilePicturePage: function () { - this.reachDependentPage(); - this.chromy.waitUntilVisible('.webform-component-fieldset'); - this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); - this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001', '1234'); - this.chromy.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010', 'sibling'); - this.chromy.click('.webform-next'); - this.chromy.wait('input[value="Profile Picture"]'); + async reachProfilePicturePage () { + await this.reachDependentPage(); + await this.puppet.waitFor('.webform-component-fieldset', { visible: true }); + await this.puppet.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); + await this.puppet.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001', '1234'); + await this.puppet.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010', 'sibling'); + await this.puppet.click('.webform-next'); + await this.puppet.waitFor('input[value="Profile Picture"]'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index bb63a90e9a0..118fb3bcba5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -1,5 +1,4 @@ const _ = require('lodash'); -const Promise = require('es6-promise').Promise; module.exports = { /** @@ -9,7 +8,7 @@ module.exports = { * @param {Boolean} clearDialogs if true it will close modals and notifications * @return {Object} */ - init: async (puppet, clearDialogs) => { + async init (puppet, clearDialogs) { clearDialogs = typeof clearDialogs !== 'undefined' ? !!clearDialogs : true; this.puppet = puppet; @@ -45,7 +44,7 @@ module.exports = { * a collection of methods and properties that will extend the main page * @return {Object} */ - extend: (page) => { + extend (page) { return _.assign(Object.create(this), page); }, @@ -53,30 +52,23 @@ module.exports = { * Waits for the modal dialog to load. By default it waits for the .modal class * in dialog otherwise user can specify a custom waitSelector. Once model is * visible it loads the respective modalModule (if any) + * * @param {String} modalModule * @param {String} waitSelector - * @return {Promise} + * @return {Object} the modal */ - waitForModal: async (modalModule, waitSelector) => { - return new Promise(async resolve => { - await this.puppet.waitFor(waitSelector || '.modal'); - await this.puppet.wait(300); - - if (modalModule) { - let modal = await require('./modals/' + modalModule).init(this.puppet, false); + async waitForModal (modalModule, waitSelector) { + await this.puppet.waitFor(waitSelector || '.modal', { visible: true }); + await this.puppet.waitFor(300); - resolve(modal); - } else { - resolve(); - } - }); + if (modalModule) { + return require('./modals/' + modalModule).init(this.puppet, false); + } } }; /** * Closes any modal currently open - * - * @return {Object} */ async function closeAnyModal () { const openModalSelector = '.modal.in'; @@ -85,16 +77,12 @@ async function closeAnyModal () { if (result) { await this.puppet.click(openModalSelector + ' .close[ng-click="cancel()"]'); - await this.puppet.wait(300); + await this.puppet.waitFor(300); } - - return this; } /** * Closes any notification currently open - * - * @return {Object} */ async function closeNotifications () { const notificationSelector = 'a.ui-notify-cross.ui-notify-close'; @@ -103,8 +91,6 @@ async function closeNotifications () { if (result) { await this.puppet.click(notificationSelector); - await this.puppet.wait(500); + await this.puppet.waitFor(500); } - - return this; } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js index 50a69e7ffc1..987bafea126 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js @@ -1,4 +1,4 @@ -var modal = require('./page'); +const modal = require('./page'); module.exports = modal.extend({ /** @@ -6,10 +6,8 @@ module.exports = modal.extend({ * * @return {object} */ - seeResources: function () { - this.chromy.click('.fieldset-title'); - this.chromy.wait(2000); // wait for animation to complete - - return this; + async seeResources () { + await this.puppet.click('.fieldset-title'); + await this.puppet.waitFor(2000); // wait for animation to complete } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js index 00a0045d60d..6d6821a36bc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js @@ -1,10 +1,10 @@ -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** * Wait for the page to be ready */ - waitForReady: function () { - this.chromy.waitUntilVisible('.chr_leave-balance-tab'); + async waitForReady () { + await this.puppet.waitFor('.chr_leave-balance-tab', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js index d6cf60366a7..eba81a4729d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-calendar.js @@ -1,33 +1,25 @@ -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** * Wait for the page to be ready by looking at * the visibility of a leave calendar item element */ - waitForReady: function () { - this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); + async waitForReady () { + await this.puppet.waitFor('leave-calendar-month .chr_leave-calendar__item', { visible: true }); }, /** * Toggle the calendar legend - * - * @return {Promise} */ - toggleLegend: function () { - this.chromy.click('.chr_leave-calendar__legend__title'); - - return this; + async toggleLegend () { + await this.puppet.click('.chr_leave-calendar__legend__title'); }, /** * Toggle contacts with leaves - * - * @return {Promise} */ - toggleContactsWithLeaves: function () { - this.chromy.click('.chr_leave-calendar__toggle-contacts-with-leaves'); - - return this; + async toggleContactsWithLeaves () { + await this.puppet.click('.chr_leave-calendar__toggle-contacts-with-leaves'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js index 5217a6113ee..a6659767e5c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js @@ -1,56 +1,47 @@ /* global Event */ -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** * Wait for the page to be ready as it waits for the actions of the first * row of leave requests to be visible - * - * @return {Object} this object */ - waitForReady: function () { - this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); + async waitForReady () { + await this.puppet.waitFor('tbody tr:nth-child(1) a', { visible: true }); }, /** * Change the filter by Assignee * * @param {String} type (me|unassigned|all) - * @return {Object} this object */ - changeFilterByAssignee: function (type) { - var filters = ['me', 'unassigned', 'all']; + async changeFilterByAssignee (type) { + const filters = ['me', 'unassigned', 'all']; - this.chromy.click( + await this.puppet.click( '.chr_manage_leave_requests__assignee_filter button:nth-of-type(' + (filters.indexOf(type) + 1) + ')'); - this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); - - return this; + await this.puppet.waitFor('tbody tr:nth-child(1) a', { visible: true }); }, /** * Opens the dropdown for manager actions like edit/respond, cancel. * * @param {Number} row number corresponding to leave request in the list - * @return {Object} this object */ - openActionsForRow: function (row) { - this.chromy.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); - - return this; + async openActionsForRow (row) { + await this.puppet.click('.chr_manage_leave_requests__panel_body tr:nth-child(' + (row || 1) + ') .dropdown-toggle'); }, /** * Expands filters on screen * - * @return {Object} this object */ - expandFilter: function () { - this.chromy.click('.chr_manage_leave_requests__filter'); - this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header div:nth-child(1)'); + async expandFilter () { + await this.puppet.click('.chr_manage_leave_requests__filter'); + await this.puppet.waitFor('.chr_manage_leave_requests__sub-header div:nth-child(1)', { visible: true }); return this; }, @@ -59,53 +50,37 @@ module.exports = page.extend({ * Opens leave type filter * * @param {Number} leaveType index like 1 for Holiday/Vacation, 2 for TOIL, 3 for Sickness - * @return {Object} this object */ - openLeaveTypeFor: function (leaveType) { - this.chromy.evaluate(function (leaveType) { - var element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); + async openLeaveTypeFor (leaveType) { + await this.puppet.evaluate(function (leaveType) { + const element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); element.selectedIndex = leaveType;// for TOIL option element.dispatchEvent(new Event('change')); - }, [leaveType]); - this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); - - return this; + }, leaveType); + await this.puppet.waitFor('tbody tr:nth-child(1) a', { visible: true }); }, /** * User clicks on the edit/respond action * * @param {Number} row number corresponding to leave request in the list - * @return {Promise} */ - editRequest: function (row) { - this.chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('leave-request-popup-details-tab .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - return this; + async editRequest (row) { + await this.puppet.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + await this.puppet.waitFor('.modal-content .spinner:nth-child(1)', { hidden: true }); + await this.puppet.waitFor('leave-request-popup-details-tab .spinner', { hidden: true }); }, /** * Apply leave on behalf of staff * @param {String} row number corresponding to leave request in the list like leave, sickness or toil - * @return {Promise} */ - applyLeaveForStaff: function (leaveType) { - var leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; - - this.chromy.click('.button-container leave-request-record-actions .dropdown-toggle'); - this.chromy.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); + async applyLeaveForStaff (leaveType) { + const leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; - this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); + await this.puppet.click('.button-container leave-request-record-actions .dropdown-toggle'); + await this.puppet.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); + await this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js index 65c23877022..bb0ae2e679c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js @@ -1,18 +1,13 @@ /* globals jQuery, MouseEvent */ -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** - * Clears the currently selected month from the calendar "Selected Months" - * field. - * - * @returns {Object} - returns a reference to the page object. + * Clears the currently selected month from the calendar "Selected Months" field */ - clearCurrentlySelectedMonth: function () { - this.chromy.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); - - return this; + async clearCurrentlySelectedMonth () { + await this.puppet.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); }, /** @@ -21,34 +16,24 @@ module.exports = page.extend({ * * @param {String} monthName - the month of the name as it appear in the * "Selected Months" options. - * @returns {Object} - returns a reference to the page object. */ - showMonth: function (monthName) { - this.chromy.click('.chr_leave-calendar__day-selector input'); - this.chromy.evaluate(function (monthName) { + async showMonth (monthName) { + await this.puppet.click('.chr_leave-calendar__day-selector input'); + await this.puppet.evaluate(monthName => { jQuery('.ui-select-choices-row:contains(' + monthName + ')').click(); - }, [monthName]); - this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); - - return this; + }, monthName); + await this.puppet.waitFor('leave-calendar-month leave-calendar-day', { visible: true }); }, /** - * Hovers on top of a leave day visible on the calendar until a tooltip - * pops up. - * - * @returns {Object} - returns a reference to the page object. + * Hovers on top of a leave day visible on the calendar until a tooltip pops up */ - showTooltip: function () { - var chromy = this.chromy; - - chromy.evaluate(function () { - var event = new MouseEvent('mouseover'); + async showTooltip () { + await this.puppet.evaluate(() => { + const event = new MouseEvent('mouseover'); document.querySelector('.chr_leave-calendar__item a').dispatchEvent(event); }); - chromy.waitUntilVisible('.tooltip'); - - return this; + await this.puppet.waitFor('.tooltip', { visible: true }); }, /** @@ -57,23 +42,21 @@ module.exports = page.extend({ * @param {Number} year - the year to select from the absence period options. * @returns {Object} - returns a reference to the page object. */ - showYear: function (year) { - this.chromy.evaluate(function (year) { - var select = jQuery('.chr_manager_calendar__sub-header select'); - var yearValue = select.find('option:contains(' + year + ')').attr('value'); + async showYear (year) { + await this.puppet.evaluate(year => { + const select = jQuery('.chr_manager_calendar__sub-header select'); + const yearValue = select.find('option:contains(' + year + ')').attr('value'); select.val(yearValue).change(); - }, [year]); - this.chromy.waitUntilVisible('leave-calendar-month leave-calendar-day'); - - return this; + }, year); + await this.puppet.waitFor('leave-calendar-month leave-calendar-day', { visible: true }); }, /** * Wait for the page to be ready by looking at * the visibility of a leave calendar item element */ - waitForReady: function () { - this.chromy.waitUntilVisible('leave-calendar-month .chr_leave-calendar__item'); + async waitForReady () { + await this.puppet.waitFor('leave-calendar-month .chr_leave-calendar__item', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js index c4a8e091a88..9d82774e593 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js @@ -1,171 +1,126 @@ /* globals Event */ -var _ = require('lodash'); -var Promise = require('es6-promise').Promise; -var page = require('./page'); +const _ = require('lodash'); +const page = require('./page'); module.exports = page.extend({ /** * Selects the days mode for the opened leave request * - * @param {String} mode single|multiple - * @return {Promise} + * @param {String} mode single|multiple */ - changeRequestDaysMode: function (mode) { - var optionIndex = ['multiple', 'single'].indexOf(mode) + 1; + async changeRequestDaysMode (mode) { + const optionIndex = ['multiple', 'single'].indexOf(mode) + 1; - this.chromy.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); - - return this; + await this.puppet.click('[ng-model="detailsTab.uiOptions.multipleDays"]:nth-child(' + optionIndex + ')'); }, /** * User clicks on the edit/respond action * * @param {Number} row number corresponding to leave request in the list - * @return {Promise} + * @return {Object} the request modal */ - editRequest: function (row) { - var chromy = this.chromy; - - return new Promise(function (resolve) { - chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('leave-request-popup-details-tab .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - resolve(this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form')); - }.bind(this)); + async editRequest (row) { + await this.puppet.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); + await this.puppet.waitFor('.modal-content .spinner:nth-child(1)', { hidden: true }); + await this.puppet.waitFor('leave-request-popup-details-tab .spinner', { hidden: true }); + + return this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); }, /** * Expands deduction field to show selectors * - * @param {String} type from|to - * @return {Promise} + * @param {String} type from|to */ - expandDeductionField: function (type) { - var fieldSelector = '[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"] a'; - - this.chromy.wait(fieldSelector); - this.chromy.click(fieldSelector); + async expandDeductionField (type) { + const fieldSelector = '[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"] a'; - return this; + await this.puppet.waitFor(fieldSelector); + await this.puppet.click(fieldSelector); }, /** * Opens the Leave Request Modal for a new request of the given type * - * @param {String} requestType leave|sickness|toil - * @return {Promise} + * @param {String} requestType leave|sickness|toil */ - newRequest: function (requestType) { - var requestTypes = ['leave', 'sickness', 'toil']; // must be in the same quantity and order as in UI - var requestTypeButtonIndex = requestTypes.indexOf(requestType) + 1; - var actionDropdownSelector = 'leave-request-record-actions'; - var actionButtonSelector = actionDropdownSelector + ' .dropdown-menu li:nth-child(' + requestTypeButtonIndex + ') a'; - - this.chromy.click(actionDropdownSelector + ' [uib-dropdown] > button'); - this.chromy.wait(actionButtonSelector); - this.chromy.click(actionButtonSelector); - this.chromy.waitUntilVisible('.chr_leave-request-modal__tab .form-group'); - - return this; + async newRequest (requestType) { + const requestTypes = ['leave', 'sickness', 'toil']; // must be in the same quantity and order as in UI + const requestTypeButtonIndex = requestTypes.indexOf(requestType) + 1; + const actionDropdownSelector = 'leave-request-record-actions'; + const actionButtonSelector = actionDropdownSelector + ' .dropdown-menu li:nth-child(' + requestTypeButtonIndex + ') a'; + + await this.puppet.click(actionDropdownSelector + ' [uib-dropdown] > button'); + await this.puppet.waitFor(actionButtonSelector); + await this.puppet.click(actionButtonSelector); + await this.puppet.waitFor('.chr_leave-request-modal__tab .form-group', { visible: true }); }, /** * Opens the dropdown for staff actions like edit/respond, cancel. * * @param {Number} row number corresponding to leave request in the list - * @return {Object} this object */ - openActionsForRow: function (row) { - this.chromy.wait('tr:nth-child(1) div[uib-dropdown] a:nth-child(1)'); - this.chromy.click('div:nth-child(2) > div > table > tbody > tr:nth-child(' + (row || 1) + ') div[uib-dropdown] a:nth-child(1)'); - - return this; + async openActionsForRow (row) { + await this.puppet.waitFor('tr:nth-child(1) div[uib-dropdown] a:nth-child(1)'); + await this.puppet.click('div:nth-child(2) > div > table > tbody > tr:nth-child(' + (row || 1) + ') div[uib-dropdown] a:nth-child(1)'); }, /** * Opens the given section of my report pageName * * @param {String} section - * @return {Object} this object */ - openSection: function (section) { - this.chromy.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - return this; + async openSection (section) { + await this.puppet.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); + await this.puppet.waitFor('.spinner', { hidden: true }); }, /** * Selects the request Absence Type by the given label * - * @param {String} absenceTypeLabel ex. "Holiday in Hours" - * @return {Promise} + * @param {String} absenceTypeLabel ex. "Holiday in Hours" */ - selectRequestAbsenceType: function (absenceTypeLabel) { - this.chromy.evaluate(function (absenceTypeLabel) { - var absenceTypeSelect = document.querySelector('[name=absenceTypeSelect]'); + async selectRequestAbsenceType (absenceTypeLabel) { + await this.puppet.evaluate(function (absenceTypeLabel) { + const absenceTypeSelect = document.querySelector('[name=absenceTypeSelect]'); absenceTypeSelect.selectedIndex = _.findIndex(absenceTypeSelect.querySelectorAll('option'), function (option) { return option.text.search(absenceTypeLabel) !== -1; }); // Select the needed option absenceTypeSelect.dispatchEvent(new Event('change')); // Trigger onChange event - }, [absenceTypeLabel]); - - return this; + }, absenceTypeLabel); }, /** * Selects a date in the datepicker * - * @param {String} type from|to + * @param {String} type from|to * @param {Number} weekPosition eg. 2 for second week in the calendar * @param {Number} weekDayPosition eg. 1 for Monday or 4 for Thursday - * @return {Promise} */ - selectRequestDate: function (type, weekPosition, weekDayPosition) { - var daySelector = '.uib-daypicker tr:nth-child(' + - weekPosition + ') td:nth-child( ' + weekDayPosition + ') button'; + async selectRequestDate (type, weekPosition, weekDayPosition) { + const daySelector = '.uib-daypicker tr:nth-child(' + weekPosition + ') td:nth-child( ' + weekDayPosition + ') button'; - this.chromy.click('[ng-model="detailsTab.uiOptions.' + type + 'Date"]'); - this.chromy.wait(daySelector); - this.chromy.click(daySelector); - this.chromy.waitUntilVisible('[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"]'); - - return this; + await this.puppet.click('[ng-model="detailsTab.uiOptions.' + type + 'Date"]'); + await this.puppet.waitFor(daySelector); + await this.puppet.click(daySelector); + await this.puppet.waitFor('[ng-switch="detailsTab.uiOptions.times.' + type + '.amountExpanded"]', { visible: true }); }, /** * Wait for the page to be ready - * - * @return {Object} this object */ - waitForReady: function () { - this.chromy.waitUntilVisible('td[ng-click="report.toggleSection(\'pending\')"]'); + async waitForReady () { + await this.puppet.waitFor('td[ng-click="report.toggleSection(\'pending\')"]', { visible: true }); }, /** * Waits for the request balance to be calculated - * - * @return {Promise} */ - waitUntilRequestBalanceIsCalculated: function () { - this.chromy.waitUntilVisible('[ng-show="detailsTab.uiOptions.showBalance"]'); - - return this; + async waitUntilRequestBalanceIsCalculated () { + await this.puppet.waitFor('[ng-show="detailsTab.uiOptions.showBalance"]', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js index 298b710f4ac..50e7aaac5e7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-my-details.js @@ -1,15 +1,12 @@ -var modal = require('./page'); +const modal = require('./page'); module.exports = modal.extend({ /** * Opens Edit My Details Popup * - * @return {Object} */ - showEditMyDetailsPopup: function () { - this.chromy.click('[href="/my_details/nojs/view"]'); - this.chromy.waitUntilVisible('.modal-civihr-custom__section'); - - return this; + async showEditMyDetailsPopup () { + await this.puppet.click('[href="/my_details/nojs/view"]'); + await this.puppet.waitFor('.modal-civihr-custom__section', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js index a4055ac42cb..12a461bb34c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js @@ -1,24 +1,20 @@ -var modal = require('./page'); +const modal = require('./page'); module.exports = modal.extend({ /** * Opens Completed tasks modal */ - openCompletedTasksModal: function () { - this.chromy.click('.pane-views-tasks-block a.show-complete-tasks'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.loading-spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - this.chromy.waitUntilVisible('.view-Tasks'); + async openCompletedTasksModal () { + await this.puppet.click('.pane-views-tasks-block a.show-complete-tasks'); + await this.puppet.waitFor('.loading-spinner', { hidden: true }); + await this.puppet.waitFor('.view-Tasks', { visible: true }); }, /** * Opens Create New Task modal */ - openCreateNewTaskModal: function () { - this.chromy.click('.create-new-task'); - this.chromy.waitUntilVisible('#civihr-employee-portal-civi-tasks-form'); + async openCreateNewTaskModal () { + await this.puppet.click('.create-new-task'); + await this.puppet.waitFor('#civihr-employee-portal-civi-tasks-form', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js index bb4ee6b4454..cef0b563cf5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js @@ -1,15 +1,11 @@ -var modal = require('./page'); +const modal = require('./page'); module.exports = modal.extend({ /** * Opens More Details section - * - * @return {object} */ - showMoreDetails: function () { - this.chromy.click('.fieldset-title'); - this.chromy.wait(2000); - - return this; + async showMoreDetails () { + await this.puppet.click('.fieldset-title'); + await this.puppet.waitFor(2000); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js index 637648c1ac9..a52a519a089 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js @@ -1,5 +1,4 @@ -var Promise = require('es6-promise').Promise; -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ readySelector: '.absence-tab-page', @@ -8,15 +7,12 @@ module.exports = tab.extend({ /** * Opens one of the absence sub tabs * - * @param {string} tabId - * @return {object} resolves with the tab page object + * @param {String} tabId */ - openSubTab: function (tabId) { - return new Promise(function (resolve) { - var tab = require('./absence/' + tabId); + async openSubTab (tabId) { + const tab = require('./absence/' + tabId); - this.chromy.click('[heading="' + tab.tabTitle + '"] > a'); - resolve(tab.init(this.chromy, false)); - }.bind(this)); + await this.puppet.click('[heading="' + tab.tabTitle + '"] > a'); + return tab.init(this.puppet, false); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js index 6008212c5f1..75e12649512 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/calendar.js @@ -1,5 +1,5 @@ -var tab = require('../tab'); -var sspMyLeaveCalendar = require('../../ssp-leave-absences-my-leave-calendar'); +const tab = require('../tab'); +const sspMyLeaveCalendar = require('../../ssp-leave-absences-my-leave-calendar'); module.exports = sspMyLeaveCalendar.extend(tab).extend({ readySelector: '.chr_leave-calendar__month-body', diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js index edeb15e2419..4ddf574c70b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js @@ -1,4 +1,4 @@ -var tab = require('../tab'); +const tab = require('../tab'); module.exports = tab.extend({ tabTitle: 'Entitlements', @@ -10,19 +10,11 @@ module.exports = tab.extend({ * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it */ - waitForReady: function () { - this.chromy.wait('contract-entitlements'); - this.chromy.wait('annual-entitlements'); + async waitForReady () { + await this.puppet.waitFor('contract-entitlements'); + await this.puppet.waitFor('annual-entitlements'); // Waits for spinners to hide which indicates the load of the data - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('contract-entitlements .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('annual-entitlements .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); + await this.puppet.waitFor('contract-entitlements .spinner', { hidden: true }); + await this.puppet.waitFor('annual-entitlements .spinner', { hidden: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js index 029455e60d7..a2fd9e319a2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/report.js @@ -1,4 +1,4 @@ -var tab = require('../tab'); +const tab = require('../tab'); module.exports = tab.extend({ readySelector: '.chr_leave-report__table', @@ -8,34 +8,28 @@ module.exports = tab.extend({ * Open the report section with the given name * * @param {String} sectionName - * @return {Object} */ - openSection: function (sectionName) { - this.chromy.click('[ng-click="report.toggleSection(\'' + sectionName + '\')"]'); + async openSection (sectionName) { + await this.puppet.click('[ng-click="report.toggleSection(\'' + sectionName + '\')"]'); // @NOTE when using chromy.waitUntilVisible(selector), it only considers // the *first* occurrence of the selector, not *any* occurrence // so the "wait for any of occurence of this selector" behaviour had to // be achieved manually - this.chromy.wait(function () { - var nestedTables = document.querySelectorAll('.table-nested'); + await this.puppet.waitFor(function () { + const nestedTables = document.querySelectorAll('.table-nested'); return Array.prototype.some.call(nestedTables, function (table) { return table.offsetWidth > 0 && table.offsetHeight > 0; }); }); - - return this; }, /** * Show the actions of the first leave request available * - * @return {Object} */ - showActions: function () { - this.chromy.click('.table-nested .dropdown-toggle'); - - return this; + async showActions () { + await this.puppet.click('.table-nested .dropdown-toggle'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js index e8a90d36ce1..c6c823dfd14 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/work-patterns.js @@ -1,4 +1,4 @@ -var tab = require('../tab'); +const tab = require('../tab'); module.exports = tab.extend({ readySelector: 'absence-tab-work-patterns table', @@ -7,8 +7,8 @@ module.exports = tab.extend({ /** * Shows the Custom Work Pattern modal */ - showModal: function () { - this.chromy.click('[ng-click="workpatterns.openModal()"]'); - this.chromy.waitUntilVisible('absence-tab-custom-work-pattern-modal .modal-body > .row'); + async showModal () { + await this.puppet.click('[ng-click="workpatterns.openModal()"]'); + await this.puppet.waitFor('absence-tab-custom-work-pattern-modal .modal-body > .row', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js index 2cc3da21a27..624c33f5e48 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js @@ -1,4 +1,4 @@ -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ tabTitle: 'Documents', @@ -9,12 +9,8 @@ module.exports = tab.extend({ * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it */ - waitForReady: function () { - this.chromy.waitUntilVisible('form[name="formDocuments"]'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.ct-spinner-cover'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); + async waitForReady () { + await this.puppet.waitFor('form[name="formDocuments"]', { visible: true }); + await this.puppet.waitFor('.ct-spinner-cover', { hidden: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js index 745b0f874da..2f68def1ce0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js @@ -1,44 +1,38 @@ -var Promise = require('es6-promise').Promise; -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ tabTitle: 'Job Contract', /** * Clicks on the delete button - * - * @return {object} */ - attemptDelete: function () { - this.chromy.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); - this.waitForModal(); + async attemptDelete () { + await this.puppet.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); + await this.waitForModal(); }, /** * Opens the modal of an already existing contract * - * @param {string} mode "correct" or "revision" - * @return {Promise} resolves with the job contract modal object + * @param {String} mode "correct" or "revision" + * @return {Object} the job contract modal object */ - openContractModal: function (mode) { - var param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); + async openContractModal (mode) { + const param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); - return new Promise(function (resolve) { - this.chromy.click('[ng-click="modalContract(\'' + param + '\')"]'); - resolve(this.waitForModal('job-contract')); - }.bind(this)); + await this.puppet.click('[ng-click="modalContract(\'' + param + '\')"]'); + return this.waitForModal('job-contract'); }, /** * Opens the modal for creating a new contract * - * @return {Promise} resolves with the job contract modal object + * @return {Object} the job contract modal object */ - openNewContractModal: function () { - return new Promise(function (resolve) { - this.chromy.click('.hrjc-btn-add-contract > .btn-primary'); - resolve(this.waitForModal('job-contract')); - }.bind(this)); + async openNewContractModal () { + await this.puppet.click('.hrjc-btn-add-contract > .btn-primary'); + + return this.waitForModal('job-contract'); }, /** @@ -48,15 +42,10 @@ module.exports = tab.extend({ * tab is ready, so as a quick workaround we simply override the method * and perform all the needed checks in it */ - waitForReady: function () { - this.chromy.waitUntilVisible('.hrjc-summary'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.hrjc-list-contract .spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); - - this.chromy.wait(500); + async waitForReady () { + await this.puppet.waitFor('.hrjc-summary', { visible: true }); + await this.puppet.waitFor('.hrjc-list-contract .spinner', { hidden: true }); + await this.puppet.waitFor(500); }, /** @@ -64,8 +53,8 @@ module.exports = tab.extend({ * * @return {object} */ - showFullHistory: function () { - this.chromy.click('[heading="Full History"] > a'); - this.chromy.wait('.hrjc-context-menu-toggle'); + async showFullHistory () { + await this.puppet.click('[heading="Full History"] > a'); + await this.puppet.waitFor('.hrjc-context-menu-toggle'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js index bfc207e396e..da768131dbb 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-roles.js @@ -1,4 +1,4 @@ -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ readySelector: '.job-role__tabs', @@ -7,54 +7,44 @@ module.exports = tab.extend({ /** * Clicks on the delete button */ - attemptDelete: function () { - this.chromy.click('.job-role [ng-click*="removeRole"]'); - this.waitForModal(); + async attemptDelete () { + await this.puppet.click('.job-role [ng-click*="removeRole"]'); + await this.waitForModal(); }, /** * Clicks on the edit button of a job role - * - * @return {Object} */ - edit: function () { - this.chromy.click('.tab-pane.active .job-role__actions .btn-link[ng-click$="show()"]'); - this.chromy.wait(100); - - return this; + async edit () { + await this.puppet.click('.tab-pane.active .job-role__actions .btn-link[ng-click$="show()"]'); + await this.puppet.waitFor(100); }, /** * Opens the ui-select with the given name * - * @param {String} name - * @return {Object} + * @param {String} name */ - openDropdown: function (name) { - var common = 'jobroles.editData[job_roles_data.id]'; + async openDropdown (name) { + const common = 'jobroles.editData[job_roles_data.id]'; - this.chromy.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); - this.chromy.wait(100); - - return this; + await this.puppet.click('[ng-model="' + common + '[\'' + name + '\']"] > a'); + await this.puppet.waitFor(100); }, /** * Show the form for adding a new job role */ - showAddNew: function () { - this.chromy.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); + async showAddNew () { + await this.puppet.click('.btn-primary[ng-click*="jobroles.addNewRole()"]'); }, /** * Changes active tab * - * @param {String} tabName - * @return {Object} + * @param {String} tabName */ - switchToTab: function (tabName) { - this.chromy.click('[heading="' + tabName + '"] > a'); - - return this; + async switchToTab (tabName) { + await this.puppet.click('[heading="' + tabName + '"] > a'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js index 6895b5675ea..d01249396d7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js @@ -1,4 +1,4 @@ -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ readySelector: '.chr_leave-balance-tab', diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js index a2bda12fedf..5238303fd67 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-calendar.js @@ -1,4 +1,4 @@ -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ readySelector: 'leave-calendar-day', diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js index 2edba13b5a8..7298498d8e1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-requests.js @@ -1,4 +1,4 @@ -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ readySelector: '.chr_manage_leave_requests__panel_body', @@ -7,8 +7,8 @@ module.exports = tab.extend({ /** * Shows filters */ - showFilters: function () { - this.chromy.click('.chr_manage_leave_requests__filter'); - this.chromy.waitUntilVisible('.chr_manage_leave_requests__sub-header'); + async showFilters () { + await this.puppet.click('.chr_manage_leave_requests__filter'); + await this.puppet.waitFor('.chr_manage_leave_requests__sub-header', { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js index 0a6fa683585..acababd653e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js @@ -1,11 +1,10 @@ -var page = require('../page'); +const page = require('../page'); module.exports = page.extend({ /** * Defines that the tab is ready when the a specific selector is visible - * @return {boolean} */ - waitForReady: function () { - this.chromy.waitUntilVisible(this.readySelector); + async waitForReady () { + await this.puppet.waitFor(this.readySelector, { visible: true }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js index 17d336cdfba..ef6a1eca68a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tasks.js @@ -1,4 +1,4 @@ -var tab = require('./tab'); +const tab = require('./tab'); module.exports = tab.extend({ readySelector: '.ct-page-contact', diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js index f7450aed637..a36cbfc60d3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js @@ -1,8 +1,7 @@ -var Promise = require('es6-promise').Promise; -var page = require('./page'); +const page = require('./page'); -var taskSelector = '.ct-list-task > li:nth-child(1)'; -var editableSelectors = { +const taskSelector = '.ct-list-task > li:nth-child(1)'; +const editableSelectors = { assigned: '[editable-ui-select="task.assignee_contact_id[0]"]', date: '[editable-bsdate="task.activity_date_time"]', subject: '[editable-text="task.subject"]', @@ -13,107 +12,84 @@ module.exports = page.extend({ /** * Shows the assignment modal * - * @return {Promise} resolves with the assignment modal page object + * @return {Object} the assignment modal page object */ - addAssignment: function () { - return new Promise(function (resolve) { - this.chromy.click('a[ng-click*="modalAssignment"]'); - resolve(this.waitForModal('assignment')); - }.bind(this)); + async addAssignment () { + await this.puppet.click('a[ng-click*="modalAssignment"]'); + + return this.waitForModal('assignment'); }, /** * Shows the task modal * - * @return {Promise} resolves with the task modal page object + * @return {Object} the task modal page object */ - addTask: function () { - return new Promise(function (resolve) { - this.chromy.click('a[ng-click*="itemAdd"]'); - resolve(this.waitForModal('task')); - }.bind(this)); + async addTask () { + await this.puppet.click('a[ng-click*="itemAdd"]'); + + return this.waitForModal('task'); }, /** * Opens the advanced filters - * - * @return {object} */ - advancedFilters: function () { - this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); - this.chromy.wait(500); - - return this; + async advancedFilters () { + await this.puppet.click('a[ng-click*="isCollapsed.filterAdvanced"]'); + await this.puppet.waitFor(500); }, /** * Shows the given edit-in-place field * * @param {string} fieldName - * @return {object} */ - inPlaceEdit: function (fieldName) { - this.chromy.click(editableSelectors[fieldName]); - this.chromy.wait(200); - - return this; + async inPlaceEdit (fieldName) { + await this.puppet.click(editableSelectors[fieldName]); + await this.puppet.waitFor(200); }, /** * Opens the first task of the list * - * @return {Promise} resolves with the task modal page object + * @return {Object} the task modal page object */ - openTask: function () { - return new Promise(function (resolve) { - this.chromy.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); - this.chromy.wait(function () { - // = waitWhileVisible - var dom = document.querySelector('.spinner'); - return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); - }); + async openTask () { + await this.puppet.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); + await this.puppet.waitFor('.spinner', { hidden: true }); - resolve(this.waitForModal('task')); - }.bind(this)); + return this.waitForModal('task'); }, /** * Shows the "select dates" filter */ - selectDates: function () { - this.chromy.click('.ct-select-dates'); - this.chromy.wait(500); + async selectDates () { + await this.puppet.click('.ct-select-dates'); + await this.puppet.waitFor(500); }, /** * Expands the "show more" area of the first task of the list - * - * @return {object} */ - showMore: function () { - this.chromy.click(taskSelector + ' a[ng-click*="isCollapsed"]'); - this.chromy.waitUntilVisible(taskSelector + ' article'); - this.chromy.wait(500); - - return this; + async showMore () { + await this.puppet.click(taskSelector + ' a[ng-click*="isCollapsed"]'); + await this.puppet.waitFor(taskSelector + ' article', { visible: true }); + await this.puppet.waitFor(500); }, /** * Shows the dropdown of the actions available on any given task - * - * @return {object} */ - taskActions: function () { - this.chromy.click(taskSelector + ' .ct-context-menu-toggle'); - - return this; + async taskActions () { + await this.puppet.click(taskSelector + ' .ct-context-menu-toggle'); }, /** * Waits until the specified select is visible on the page */ - waitForReady: function () { - this.chromy.waitUntilVisible('.ct-container-inner'); - this.chromy.wait(300); + async waitForReady () { + await this.puppet.waitFor('.ct-container-inner', { visible: true }); + await this.puppet.waitFor(300); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js index ddfa82c0e55..2a4a0162455 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/work-patterns-form.js @@ -1,21 +1,17 @@ -var page = require('./page'); +const page = require('./page'); module.exports = page.extend({ /** * Displays the work pattern calendar form. - * - * @return The Page instance. */ - showCalendarForm: function () { - this.chromy.click('a[href="#work-pattern-calendar"]'); - - return this; + async showCalendarForm () { + await this.puppet.click('a[href="#work-pattern-calendar"]'); }, /** * Waits until the work pattern form is visible. */ - waitForReady: function () { - this.chromy.visible('.work-pattern-form'); + async waitForReady () { + await this.puppet.waitFor('.work-pattern-form', { visible: true }); } }); From 572d760c45076ce1cfd06e97d04f7b2836ddbf83 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 26 Mar 2018 16:24:45 +0200 Subject: [PATCH 063/251] PCHR-3221: Update dependencies --- .../npm-shrinkwrap.json | 386 ++++++++++-------- uk.co.compucorp.civicrm.hrcore/package.json | 3 +- 2 files changed, 221 insertions(+), 168 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json b/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json index 47064d00c36..e523a618824 100644 --- a/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json +++ b/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json @@ -6,12 +6,14 @@ "@types/core-js": { "version": "0.9.46", "resolved": "https://registry.npmjs.org/@types/core-js/-/core-js-0.9.46.tgz", - "integrity": "sha512-LooLR6XHes9V+kNYRz1Qm8w3atw9QMn7XeZUmIpUelllF9BdryeUKd/u0Wh5ErcjpWfG39NrToU9MF7ngsTFVw==" + "integrity": "sha512-LooLR6XHes9V+kNYRz1Qm8w3atw9QMn7XeZUmIpUelllF9BdryeUKd/u0Wh5ErcjpWfG39NrToU9MF7ngsTFVw==", + "dev": true }, "@types/mkdirp": { "version": "0.3.29", "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.3.29.tgz", - "integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=" + "integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=", + "dev": true }, "@types/node": { "version": "9.4.7", @@ -431,7 +433,7 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "es-abstract": "1.11.0" } }, "array-map": { @@ -645,13 +647,14 @@ "dev": true }, "backstopjs": { - "version": "3.1.19", - "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-3.1.19.tgz", - "integrity": "sha512-IBOq69xz32OEXVgMN84dGYWq42PaQIew1rEhsecZ8GyOqYkw8hbGp3+iDhix0w3lFKK9F0N3ySdkdzlSPnHY5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-3.2.0.tgz", + "integrity": "sha512-/drgHwUIfZiFLwXmpFVnK9ozxdbLFzcmgwQ3Cn+zqkLO6WwgI/K0TtO61aLXAQPwS2oHIjn46N7HwAFHlWEH0g==", "dev": true, "requires": { "casperjs": "1.1.4", "chalk": "1.1.3", + "chromy": "0.5.11", "fs-extra": "0.30.0", "jump.js": "1.0.2", "junitwriter": "0.3.1", @@ -664,9 +667,10 @@ "p-map": "1.2.0", "path": "0.12.7", "phantomjs-prebuilt": "2.1.16", + "puppeteer": "1.2.0", "react": "15.6.2", "react-dom": "15.6.2", - "react-modal": "3.3.1", + "react-modal": "3.3.2", "react-redux": "5.0.7", "react-sticky": "6.0.1", "react-toggle-button": "2.2.0", @@ -677,54 +681,13 @@ "temp": "0.8.3", "webpack": "3.11.0", "webpack-dev-server": "2.11.2" - }, - "dependencies": { - "@types/node": { - "version": "6.0.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.66.tgz", - "integrity": "sha1-VoC3SmE10z1MAER+fD3GkaRgFiU=" - }, - "chrome-launcher": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.4.0.tgz", - "integrity": "sha512-Uq34nQ2peVRwyjsyoLs01mL9aEQDbc5RCZWNyYjGPt5ZFPL2B4OazSc98hO6HZOvMUILLL4MyAEVMzA5OvwWug==", - "requires": { - "@types/core-js": "0.9.46", - "@types/mkdirp": "0.3.29", - "@types/node": "6.0.66", - "lighthouse-logger": "1.0.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "chrome-remote-interface": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.23.3.tgz", - "integrity": "sha512-Bj3zMOEqJNVOll/5LrtvSdpbXSsCiSdnSQPmKUQDmAofahHczR3Qp5VJaAKrhNC/nlv9jj74aYzxTUPKrez8rA==", - "requires": { - "commander": "2.1.0", - "ws": "2.0.3" - } - }, - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" - }, - "ws": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-2.0.3.tgz", - "integrity": "sha1-Uy/UmcP319cg5UPx+AcQbPxX2cs=", - "requires": { - "ultron": "1.1.1" - } - } } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -930,6 +893,7 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -1330,7 +1294,7 @@ "dev": true, "requires": { "cross-spawn": "4.0.2", - "node-version": "1.1.0", + "node-version": "1.1.3", "promise-polyfill": "6.1.0" } }, @@ -1710,7 +1674,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.0", @@ -1952,7 +1917,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.39" + "es5-ext": "0.10.41" } }, "dashdash": { @@ -1997,6 +1962,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -2106,7 +2072,7 @@ "requires": { "globby": "6.1.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", "p-map": "1.2.0", "pify": "3.0.0", "rimraf": "2.6.2" @@ -2444,9 +2410,9 @@ } }, "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", "dev": true, "requires": { "es-to-primitive": "1.1.1", @@ -2468,13 +2434,14 @@ } }, "es5-ext": { - "version": "0.10.39", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz", - "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==", + "version": "0.10.41", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", + "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", "dev": true, "requires": { "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -2484,7 +2451,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.41", "es6-symbol": "3.1.1" } }, @@ -2495,7 +2462,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.41", "es6-iterator": "2.0.3", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -2508,6 +2475,15 @@ "integrity": "sha512-LSas5vsuA6Q4nEdf9wokY5/AJYXry98i0IzXsv49rYsgDGDNDPbqAYR1Pe23iFxygfbGZNR/5VrHXBCh2BhvUQ==", "dev": true }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "4.2.2" + } + }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -2515,7 +2491,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.41", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -2528,7 +2504,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.39" + "es5-ext": "0.10.41" } }, "es6-weak-map": { @@ -2538,7 +2514,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.39", + "es5-ext": "0.10.41", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -2622,7 +2598,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.39" + "es5-ext": "0.10.41" } }, "eventemitter3": { @@ -2896,9 +2872,9 @@ } }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, "requires": { "accepts": "1.3.5", @@ -2913,7 +2889,7 @@ "encodeurl": "1.0.2", "escape-html": "1.0.3", "etag": "1.8.1", - "finalhandler": "1.1.0", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "1.1.2", @@ -2924,11 +2900,11 @@ "qs": "6.5.1", "range-parser": "1.2.0", "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", + "send": "0.16.2", + "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", "vary": "1.1.2" }, @@ -2950,9 +2926,9 @@ "dev": true }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { "debug": "2.6.9", @@ -2960,7 +2936,7 @@ "escape-html": "1.0.3", "on-finished": "2.3.0", "parseurl": "1.3.2", - "statuses": "1.3.1", + "statuses": "1.4.0", "unpipe": "1.0.0" } }, @@ -2985,11 +2961,15 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } } } }, @@ -3363,7 +3343,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "1.1.3", @@ -4436,6 +4417,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -5458,9 +5440,9 @@ "dev": true, "requires": { "inherits": "2.0.3", - "obuf": "1.1.1", + "obuf": "1.1.2", "readable-stream": "2.3.3", - "wbuf": "1.7.2" + "wbuf": "1.7.3" } }, "html-entities": { @@ -5502,9 +5484,9 @@ } }, "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz", + "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA==", "dev": true }, "http-proxy": { @@ -5728,6 +5710,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -5736,7 +5719,8 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "ini": { "version": "1.3.5", @@ -6012,9 +5996,9 @@ "dev": true }, "invariant": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { "loose-envify": "1.3.1" @@ -6234,9 +6218,9 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "1.0.1" @@ -7050,6 +7034,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.0.1.tgz", "integrity": "sha1-8HPYP3rLyWcpvxAKEhyPAGmRrmE=", + "dev": true, "requires": { "debug": "2.6.9" } @@ -7115,9 +7100,9 @@ "dev": true }, "lodash-es": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.5.tgz", - "integrity": "sha512-Ez3ONp3TK9gX1HYKp6IhetcVybD+2F+Yp6GS9dfH8ue6EOCEzQtQEh4K0FYWBP9qLv+lzeQAYXw+3ySfxyZqkw==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.7.tgz", + "integrity": "sha512-jzqTi3vk4J5Dxq43cNjB0ekfCjPLHixoY2Sc0WHTo+0r928taLqe/VCt02vY5uQBvg0rdXgL3xWkK4X0MCmZcw==", "dev": true }, "lodash._basecopy": { @@ -7755,6 +7740,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "1.1.8" } @@ -7800,6 +7786,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" }, @@ -7807,7 +7794,8 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true } } }, @@ -7881,7 +7869,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "multicast-dns": { "version": "6.2.3", @@ -7966,6 +7955,12 @@ "dev": true, "optional": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -8495,9 +8490,9 @@ "optional": true }, "node-version": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.0.tgz", - "integrity": "sha512-t1V2RFiaTavaW3jtQO0A2nok6k7/Gghuvx2rjvICuT0B0dYaObBQ4U0xHL+ZTPFZodt1LMYG2Vi2nypfz4/AJg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz", + "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==", "dev": true }, "node.extend": { @@ -8824,9 +8819,9 @@ } }, "obuf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { @@ -8848,6 +8843,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1.0.2" } @@ -8859,9 +8855,9 @@ "dev": true }, "opn": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", - "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { "is-wsl": "1.1.0" @@ -9252,7 +9248,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -9597,6 +9594,12 @@ } } }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "dev": true + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -9628,6 +9631,60 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, + "puppeteer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.2.0.tgz", + "integrity": "sha512-4sY/6mB7+kNPGAzPGKq65tH0VG3ohUEkXHuOReB9K/tw3m1TqifYmxnMR/uDeci/UPwyk5K1gWYh8rw0U0Zscw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "extract-zip": "1.6.6", + "https-proxy-agent": "2.2.0", + "mime": "1.6.0", + "progress": "2.0.0", + "proxy-from-env": "1.0.0", + "rimraf": "2.6.2", + "ws": "3.3.3" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "dev": true, + "requires": { + "es6-promisify": "5.0.0" + } + }, + "https-proxy-agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.0.tgz", + "integrity": "sha512-uUWcfXHvy/dwfM9bqa6AozvAjS32dZSTUYd/4SEpYKRg6LEcPLshksnQYRudM9AyNvUARMfAg5TLjUDyX/K4vA==", + "dev": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + } + } + }, "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", @@ -9780,9 +9837,9 @@ } }, "react-modal": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.3.1.tgz", - "integrity": "sha512-d1A8xXIvW+YVKwRMrFY5qneuC5FSa4OnOE78hgqfz+MYLb1Ai/B3D3Dzx1Zrw4ZD5rS16SKiPe5rl4UZt+AjpQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.3.2.tgz", + "integrity": "sha512-DLrmPG9PyXWSNA2ve1LttnNRE9Umy3u3awFeK+72dLOksLM+EoTg8Z2h/i/DV3O8ZGvnEhacjAVXdZuRDGvaag==", "dev": true, "requires": { "exenv": "1.2.2", @@ -9816,9 +9873,9 @@ "dev": true, "requires": { "hoist-non-react-statics": "2.5.0", - "invariant": "2.2.3", + "invariant": "2.2.4", "lodash": "4.17.5", - "lodash-es": "4.17.5", + "lodash-es": "4.17.7", "loose-envify": "1.3.1", "prop-types": "15.6.1" }, @@ -9975,7 +10032,7 @@ "dev": true, "requires": { "lodash": "4.17.4", - "lodash-es": "4.17.5", + "lodash-es": "4.17.7", "loose-envify": "1.3.1", "symbol-observable": "1.2.0" } @@ -10185,6 +10242,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, "requires": { "glob": "7.1.2" } @@ -10389,9 +10447,9 @@ "dev": true }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, "requires": { "debug": "2.6.9", @@ -10406,7 +10464,7 @@ "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", - "statuses": "1.3.1" + "statuses": "1.4.0" }, "dependencies": { "mime": { @@ -10414,12 +10472,6 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true } } }, @@ -10474,15 +10526,15 @@ } }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { "encodeurl": "1.0.2", "escape-html": "1.0.3", "parseurl": "1.3.2", - "send": "0.16.1" + "send": "0.16.2" } }, "set-blocking": { @@ -10890,22 +10942,22 @@ "http-deceiver": "1.2.7", "safe-buffer": "5.1.1", "select-hose": "2.0.0", - "spdy-transport": "2.0.20" + "spdy-transport": "2.1.0" } }, "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { "debug": "2.6.9", "detect-node": "2.0.3", "hpack.js": "2.1.6", - "obuf": "1.1.1", + "obuf": "1.1.2", "readable-stream": "2.3.3", "safe-buffer": "5.1.1", - "wbuf": "1.7.2" + "wbuf": "1.7.3" } }, "split-string": { @@ -11219,7 +11271,7 @@ "hoist-non-react-statics": "1.2.0", "is-plain-object": "2.0.4", "prop-types": "15.6.1", - "stylis": "3.4.10", + "stylis": "3.5.0", "supports-color": "3.2.3" }, "dependencies": { @@ -11241,9 +11293,9 @@ } }, "stylis": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.4.10.tgz", - "integrity": "sha512-J7CXAfeyhjdgvdQMz2yy0gTDccq0nVmatx6IlX1je1kCqdNgk3npGOzX6qprEd2oHVv7IF5HXO08i6XFQs/JRA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz", + "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==", "dev": true }, "subarg": { @@ -11702,7 +11754,8 @@ "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true }, "umd": { "version": "3.0.1", @@ -12175,7 +12228,7 @@ "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", "dev": true, "requires": { - "chokidar": "2.0.2", + "chokidar": "2.0.3", "graceful-fs": "4.1.11", "neo-async": "2.5.0" }, @@ -12191,9 +12244,9 @@ } }, "chokidar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", - "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "dev": true, "requires": { "anymatch": "2.0.0", @@ -12243,9 +12296,9 @@ } }, "wbuf": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { "minimalistic-assert": "1.0.0" @@ -12257,9 +12310,9 @@ "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", "dev": true, "requires": { - "acorn": "5.5.0", + "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", - "ajv": "6.2.1", + "ajv": "6.3.0", "ajv-keywords": "3.1.0", "async": "2.1.5", "enhanced-resolve": "3.4.1", @@ -12282,15 +12335,15 @@ }, "dependencies": { "acorn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.0.tgz", - "integrity": "sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", + "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", "dev": true, "requires": { "fast-deep-equal": "1.0.0", @@ -12480,12 +12533,12 @@ "ansi-html": "0.0.7", "array-includes": "3.0.3", "bonjour": "3.5.0", - "chokidar": "2.0.2", + "chokidar": "2.0.3", "compression": "1.7.2", "connect-history-api-fallback": "1.5.0", "debug": "3.1.0", "del": "3.0.0", - "express": "4.16.2", + "express": "4.16.3", "html-entities": "1.2.1", "http-proxy-middleware": "0.17.4", "import-local": "1.0.0", @@ -12493,7 +12546,7 @@ "ip": "1.1.5", "killable": "1.0.0", "loglevel": "1.6.1", - "opn": "5.2.0", + "opn": "5.3.0", "portfinder": "1.0.13", "selfsigned": "1.10.2", "serve-index": "1.9.1", @@ -12523,9 +12576,9 @@ "dev": true }, "chokidar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", - "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "dev": true, "requires": { "anymatch": "2.0.0", @@ -12746,7 +12799,7 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.10", + "http-parser-js": "0.4.11", "websocket-extensions": "0.1.3" } }, @@ -12818,7 +12871,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "ws": { "version": "3.3.3", diff --git a/uk.co.compucorp.civicrm.hrcore/package.json b/uk.co.compucorp.civicrm.hrcore/package.json index bc921ef5ec6..8d28217ad27 100644 --- a/uk.co.compucorp.civicrm.hrcore/package.json +++ b/uk.co.compucorp.civicrm.hrcore/package.json @@ -6,8 +6,7 @@ }, "devDependencies": { "ansi-colors": "^1.0.1", - "backstopjs": "^3.1.19", - "chromy": "^0.5.11", + "backstopjs": "^3.2.0", "civicrm-scssroot": "git://github.com/totten/civicrm-scssroot.git#v0.1.1", "detect-installed": "^2.0.4", "es6-promise": "^4.2.2", From 58b6c815660e4ffdf450ca9a66e5b88e91c67eb3 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 06:05:32 +0200 Subject: [PATCH 064/251] PCHR-3221: Add wait logic for contact summary page --- .../backstop_data/page-objects/contact-summary.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index cffbc225112..631285f615a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -45,5 +45,12 @@ module.exports = page.extend({ showActions: function () { this.chromy.click('#crm-contact-actions-link'); this.chromy.wait('#crm-contact-actions-list'); + }, + + /** + * Wait an arbitrary amound of time for the data to load + */ + waitForReady: function () { + this.chromy.wait(6000); } }); From 071ddeec5fa52468a68629f34be6d6c11d3f93e4 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 06:06:19 +0200 Subject: [PATCH 065/251] PCHR-3221: Add basic show script for contact summary --- .../backstop_data/engine_scripts/contact-summary/show.js | 7 +++++++ .../backstop_data/scenarios/contact-summary.json | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show.js new file mode 100644 index 00000000000..b65fe28b6d1 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/contact-summary'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json index f7eb634db2a..fd9c3c7df50 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json @@ -2,7 +2,8 @@ "scenarios": [ { "label": "Contact Summary", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}" + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "onReadyScript": "contact-summary/show.js" }, { "label": "Contact Summary / Actions", From a36d156c7b4e4ddb323ce770f7af5dff32473b9e Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 06:08:41 +0200 Subject: [PATCH 066/251] PCHR-3221: Add basic show script for documents --- .../backstop_data/engine_scripts/documents/show.js | 7 +++++++ .../backstop_data/scenarios/ta-documents.json | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/show.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/show.js new file mode 100644 index 00000000000..ba264c78819 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/documents'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json index 25abc9f1753..81c992bfaf4 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ta-documents.json @@ -2,7 +2,8 @@ "scenarios": [ { "label": "T&A / Documents", - "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents" + "url": "{{siteUrl}}/civicrm/tasksassignments/dashboard#/documents", + "onReadyScript": "documents/show.js" }, { "label": "T&A / Documents / Advanced Filters", From 7bc3ac3aee7fdd70f90635bacf5c8042a8cb9ec6 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 06:15:47 +0200 Subject: [PATCH 067/251] PCHR-3221: Go directly to Job Contract tab --- .../job-contract/change-terms.js | 7 ++---- .../job-contract/correct-error.js | 7 ++---- .../job-contract/delete-dialog.js | 7 ++---- .../job-contract/full-history.js | 7 ++---- .../contact-summary/job-contract/summary.js | 4 ++-- .../job-contract/tab-funding.js | 7 ++---- .../job-contract/tab-general.js | 7 ++---- .../contact-summary/job-contract/tab-hours.js | 7 ++---- .../job-contract/tab-insurance.js | 7 ++---- .../contact-summary/job-contract/tab-leave.js | 7 ++---- .../contact-summary/job-contract/tab-pay.js | 7 ++---- .../job-contract/tab-pension.js | 7 ++---- .../scenarios/tab-job-contract.json | 24 +++++++++---------- 13 files changed, 36 insertions(+), 69 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js index 2e1a40d780d..2cca482bf7c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/change-terms.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openContractModal('revision'); - }) + page.init(engine).openContractModal('revision') .then(function (modal) { modal.selectTab('General'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js index af4fc737916..1d49d8f2e80 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/correct-error.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openContractModal('correct'); - }) + page.init(engine).openContractModal('correct') .then(function (modal) { modal.selectTab('General'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js index e33d92d1df2..9c45a4d9850 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - tab.attemptDelete(); - }); + page.init(engine).attemptDelete(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js index c5dc37ae205..b3e970d1067 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - tab.showFullHistory(); - }); + page.init(engine).showFullHistory(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js index 527afbf32d8..288d056f3ad 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/summary.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract'); + page.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js index 15f9a456a82..e3d60543ed6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-funding.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('Funding'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js index c45c816986a..48c3277d38b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-general.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('General'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js index 1d4fea6a42b..d4e8c03e7b6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-hours.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('Hours'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js index c067affb4b2..18d94473d3c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-insurance.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('Insurance'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js index 1539d809fbe..efe4c93b721 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-leave.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('Leave'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js index e7d3934860e..1182f2202ce 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pay.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('Pay'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js index 908a79bdc87..eaad22ef920 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/tab-pension.js @@ -1,12 +1,9 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-contract'); module.exports = function (engine) { - page.init(engine).openTab('job-contract') - .then(function (tab) { - return tab.openNewContractModal(); - }) + page.init(engine).openNewContractModal() .then(function (modal) { modal.selectTab('Pension'); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json index 35bf0b66bef..e87ec65e9f5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json @@ -2,62 +2,62 @@ "scenarios": [ { "label": "Job Contract", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/summary.js" }, { "label": "Job Contract / Full History", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/full-history.js" }, { "label": "Job Contract / Delete Dialog", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/delete-dialog.js" }, { "label": "Job Contract / Modal / Tab / General", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-general.js" }, { "label": "Job Contract / Modal / Tab / Hours", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-hours.js" }, { "label": "Job Contract / Modal / Tab / Pay", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-pay.js" }, { "label": "Job Contract / Modal / Tab / Leave", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-leave.js" }, { "label": "Job Contract / Modal / Tab / Insurance", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-insurance.js" }, { "label": "Job Contract / Modal / Tab / Pension", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-pension.js" }, { "label": "Job Contract / Modal / Tab / Funding", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-funding.js" }, { "label": "Job Contract / Modal / Correct Error ", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/correct-error.js" }, { "label": "Job Contract / Modal / Change Terms ", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/change-terms.js" } ] From f128f23aa164faef63f709bbd876c4c5cce1e1ff Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 06:19:07 +0200 Subject: [PATCH 068/251] PCHR-3221: Go directly to Job Roles tab --- .../contact-summary/job-roles/add-new.js | 7 ++----- .../job-roles/basic-details-edit.js | 7 ++----- .../contact-summary/job-roles/basic-details.js | 4 ++-- .../job-roles/cost-centres-edit.js | 7 ++----- .../contact-summary/job-roles/cost-centres.js | 7 ++----- .../contact-summary/job-roles/delete-dialog.js | 7 ++----- .../contact-summary/job-roles/funding-edit.js | 7 ++----- .../contact-summary/job-roles/funding.js | 7 ++----- .../job-roles/open-ui-select.js | 10 +++++----- .../backstop_data/scenarios/tab-job-roles.json | 18 +++++++++--------- 10 files changed, 30 insertions(+), 51 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js index 603af011d6f..c4b15487e9c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.showAddNew(); - }); + page.init(engine).showAddNew(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js index 89dc94b870d..5d7700aecd0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details-edit.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit(); - }); + page.init(engine).switchToTab('Basic Details').edit(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js index 158686d060e..9a564c04388 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/basic-details.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles'); + page.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js index 6b2d0df72ee..b1acbfda1ff 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres-edit.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres').edit(); - }); + page.init(engine).switchToTab('Cost Centres').edit(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js index 3cdc7419c8a..e6969a03603 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Cost Centres'); - }); + page.init(engine).switchToTab('Cost Centres'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js index 2054a95e913..b56acfa0b23 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.attemptDelete(); - }); + page.init(engine).attemptDelete(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js index 9ae694b5543..6b49b1d2daf 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding-edit.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding').edit(); - }); + page.init(engine).switchToTab('Funding').edit(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js index 7b545369169..934f86f4062 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js @@ -1,10 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Funding'); - }); + page.init(engine).switchToTab('Funding'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js index 0ce0afad5d7..51ecc8ad592 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/open-ui-select.js @@ -1,10 +1,10 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/job-roles'); module.exports = function (engine) { - page.init(engine).openTab('job-roles') - .then(function (tab) { - tab.switchToTab('Basic Details').edit().openDropdown('department'); - }); + page.init(engine) + .switchToTab('Basic Details') + .edit() + .openDropdown('department'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json index 85ffd1e67da..8cc9123916c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json @@ -2,47 +2,47 @@ "scenarios": [ { "label": "Job Roles / Basic Details", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/basic-details.js" }, { "label": "Job Roles / Funding", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/funding.js" }, { "label": "Job Roles / Cost Centres", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/cost-centres.js" }, { "label": "Job Roles / Delete Dialog", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/delete-dialog.js" }, { "label": "Job Roles / Add New", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/add-new.js" }, { "label": "Job Roles / Basic Details / Edit", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/basic-details-edit.js" }, { "label": "Job Roles / Basic Details / Open ui select", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/open-ui-select.js" }, { "label": "Job Roles / Funding / Edit", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/funding-edit.js" }, { "label": "Job Roles / Cost Centres / Edit", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/cost-centres-edit.js" } ] From 6464ba13aef6f475962ad2839b209156ad7d1053 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 06:20:40 +0200 Subject: [PATCH 069/251] PCHR-3221: Go directly to T&A tabs --- .../engine_scripts/contact-summary/documents/show.js | 4 ++-- .../engine_scripts/contact-summary/tasks/show.js | 4 ++-- .../backstop_data/scenarios/tab-documents.json | 2 +- .../backstop_data/scenarios/tab-tasks.json | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js index 29435e11f4d..479e20a3ce8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/documents/show.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/documents'); module.exports = function (engine) { - page.init(engine).openTab('documents'); + page.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js index 228694b7341..b8561fc7e93 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/tasks/show.js @@ -1,7 +1,7 @@ 'use strict'; -var page = require('../../../page-objects/contact-summary'); +var page = require('../../../page-objects/tabs/tasks'); module.exports = function (engine) { - page.init(engine).openTab('tasks'); + page.init(engine); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json index f7a30474b88..42091ef6989 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json @@ -2,7 +2,7 @@ "scenarios": [ { "label": "Documents", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=cividocuments", "onReadyScript": "contact-summary/documents/show.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json index b43e3a15bda..04da26fc4d0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json @@ -2,7 +2,7 @@ "scenarios": [ { "label": "Tasks", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=civitasks", "onReadyScript": "contact-summary/tasks/show.js" } ] From 2959b798bc90e404674ef10bcd1d7b9908b3015b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 27 Mar 2018 14:34:26 +0200 Subject: [PATCH 070/251] PCHR-3221: Improve wait logic for manager leave leave balances tab --- .../ssp-leave-absences-manager-leave-balance-report.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js index 00a0045d60d..8f0af4d6a59 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js @@ -6,5 +6,13 @@ module.exports = page.extend({ */ waitForReady: function () { this.chromy.waitUntilVisible('.chr_leave-balance-tab'); + this.chromy.wait(function () { + // = waitWhileVisible + var spinners = document.querySelectorAll('.spinner'); + + return Array.prototype.every.call(spinners, function (dom) { + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + }); } }); From 6e9d85ee0b15f1620514457b754db5d6159369e0 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 28 Mar 2018 06:44:53 +0200 Subject: [PATCH 071/251] PCHR-3221: Avoid false positives in reports --- .../engine_scripts/ssp/reports-show.js | 7 ++++++ .../backstop_data/page-objects/ssp-reports.js | 24 +++++++++++++++++++ .../backstop_data/scenarios/ssp-reports.json | 6 +++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/reports-show.js create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/reports-show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/reports-show.js new file mode 100644 index 00000000000..dd2986236d7 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/reports-show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp-reports'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js new file mode 100644 index 00000000000..2a5e0faed52 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js @@ -0,0 +1,24 @@ +var modal = require('./page'); + +module.exports = modal.extend({ + /** + * The Iframe embedding the SSP reports in the CiviCRM admin adapts its height + * dynamically whenever the viewport resizes. This can lead to false positives + * due to the resize that headless Chrome performs just before taking the screenshot + * (the iframe would not resize consistently every time, leading BackstopJS to + * report height differences of a handful of pixels) + * + * In order to avoid false positives, the height of the iframe is fixed + * by applying a generated-on-the-fly style to it, so that the height can't + * change when Chrome resizes the viewport. + */ + waitForReady: function () { + this.chromy.evaluate(function () { + var tempStyle = document.createElement('style'); + tempStyle.type = 'text/css'; + tempStyle.innerHTML = '#reportsIframe { height: 1000px !important; }'; + + document.getElementsByTagName('head')[0].appendChild(tempStyle); + }); + } +}); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json index 2236e5d1afb..6296785434d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-reports.json @@ -6,11 +6,13 @@ }, { "label": "SSP / Reports / People", - "url": "{{siteUrl}}/reports/people/" + "url": "{{siteUrl}}/reports/people/", + "onReadyScript": "ssp/reports-show.js" }, { "label": "SSP / Reports / Leave and Absence", - "url": "{{siteUrl}}/reports/leave_and_absence/" + "url": "{{siteUrl}}/reports/leave_and_absence/", + "onReadyScript": "ssp/reports-show.js" }, { "label": "SSP / Reports / Settings / Age groups", From 72993eb1d82b165493d9c4e98058b84568aac82a Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 28 Mar 2018 10:05:16 +0200 Subject: [PATCH 072/251] PCHR-3221: Increase goto timeout to 1 min when creating cookies --- uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 9ce2964f8ce..32d2a1f01ca 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -267,7 +267,7 @@ function writeCookies () { return reject(new Error(err)); } - chromy = new Chromy({ port: port++ }); + chromy = new Chromy({ port: port++, gotoTimeout: 60000 }); chromy.chain() .goto(config.url) .goto(loginUrl) From df24ecd32089e87d4f7db2539b9cd6841e57dd04 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 28 Mar 2018 10:54:55 +0200 Subject: [PATCH 073/251] PCHR-3221: PR feedback --- .../backstop_data/backstop.tpl.json | 2 +- .../page-objects/contact-summary.js | 11 +++++----- .../backstop_data/page-objects/documents.js | 7 ++++--- .../page-objects/leave-absence-dashboard.js | 4 ++-- .../page-objects/modals/assignment.js | 9 +++++---- .../modals/contact-access-rights.js | 2 +- .../page-objects/modals/document.js | 12 +++++------ .../page-objects/modals/job-contract.js | 4 ++-- .../page-objects/modals/ssp-leave-request.js | 1 + .../backstop_data/page-objects/modals/task.js | 10 +++++----- .../page-objects/onboarding-wizard.js | 12 ----------- .../backstop_data/page-objects/page.js | 20 ++++++++----------- .../page-objects/ssp-hr-resources.js | 2 +- ...e-absences-manager-leave-balance-report.js | 2 +- ...p-leave-absences-manager-leave-requests.js | 13 ++++++------ .../ssp-leave-absences-my-leave-calendar.js | 8 ++++---- .../ssp-leave-absences-my-leave-report.js | 9 ++++++--- .../backstop_data/page-objects/ssp-reports.js | 1 + .../backstop_data/page-objects/ssp-tasks.js | 3 ++- .../page-objects/ssp-vacancies.js | 4 ++-- .../page-objects/tabs/absence.js | 5 +++-- .../page-objects/tabs/absence/entitlements.js | 6 ++++-- .../page-objects/tabs/documents.js | 3 ++- .../page-objects/tabs/job-contract.js | 11 ++++++---- .../backstop_data/page-objects/tabs/tab.js | 3 ++- .../backstop_data/page-objects/tasks.js | 13 ++++++------ .../gulp/tasks/backstopjs.js | 7 ++++--- 27 files changed, 92 insertions(+), 92 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json index 901999ffa99..0c71994eb0c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json @@ -19,7 +19,7 @@ "engine": "chrome", "engineFlags": [], "engineOptions": { - "waitTimeout": 12000 + "waitTimeout": 6000 }, "asyncCaptureLimit": 1, "asyncCompareLimit": 50, diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index 631285f615a..016bebf342e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -8,13 +8,11 @@ module.exports = page.extend({ * @return {Promise} resolves with the modal page object */ openManageRightsModal: function () { - var chromy = this.chromy; - return new Promise(function (resolve) { this.showActions(); - chromy.click('[data-contact-access-rights]'); - chromy.wait(function () { + this.chromy.click('[data-contact-access-rights]'); + this.chromy.wait(function () { var dom = document.querySelector('.spinner'); return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); @@ -27,12 +25,13 @@ module.exports = page.extend({ /** * Opens one of the contact summary tabs * - * @param {string} tabId - * @return {object} resolves with the tab page object + * @param {String} tabId + * @return {Object} resolves with the tab page object */ openTab: function (tabId) { return new Promise(function (resolve) { var tab = require('./tabs/' + tabId); + this.chromy.click('[title="' + tab.tabTitle + '"]'); resolve(tab.init(this.chromy, false)); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js index ee14f91b3fc..f1cad91688d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js @@ -5,13 +5,14 @@ var documentSelector = '.ct-table-documents > tbody > tr:nth-child(1)'; module.exports = page.extend({ /** - * Opens the modal to add a documents + * Adds a document by opening the modal * * @return {Promise} resolves with the document modal page object */ addDocument: function () { return new Promise(function (resolve) { this.chromy.click('a[ng-click*="itemAdd"]'); + resolve(this.waitForModal('document')); }.bind(this)); }, @@ -19,7 +20,7 @@ module.exports = page.extend({ /** * Shows the advanced filters * - * @return {object} + * @return {Object} */ advancedFilters: function () { this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); @@ -31,7 +32,7 @@ module.exports = page.extend({ /** * Shows the dropdown of the actions available on any given document * - * @return {object} + * @return {Object} */ documentActions: function () { this.chromy.click(documentSelector + ' .ct-context-menu-toggle'); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js index c5e2a9c21f3..39f949c4b9c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-dashboard.js @@ -5,8 +5,8 @@ module.exports = page.extend({ /** * Opens one of the leave absence dashboard tabs * - * @param {string} tabId - * @return {object} resolves with the tab page object + * @param {String} tabId + * @return {Object} resolves with the tab page object */ openTab: function (tabId) { var chromy = this.chromy; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js index 53bbe3387b4..70b1587d0d4 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/assignment.js @@ -7,7 +7,7 @@ module.exports = modal.extend({ /** * Clicks the "add document" button * - * @return {object} + * @return {Object} */ addDocument: function () { this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(documentList)"]'); @@ -18,7 +18,7 @@ module.exports = modal.extend({ /** * Clicks the "add task" button * - * @return {object} + * @return {Object} */ addTask: function () { this.chromy.click(this.modalRoot + ' a[ng-click="addActivity(taskList)"]'); @@ -29,7 +29,7 @@ module.exports = modal.extend({ /** * Opens a date picker * - * @return {object} + * @return {Object} */ pickDate: function () { this.chromy.click(this.modalRoot + ' [ng-model="assignment.dueDate"]'); @@ -41,13 +41,14 @@ module.exports = modal.extend({ /** * Selects an assignment type, so that the rest of the modal is shown * - * @return {object} + * @return {Object} */ selectType: function () { this.chromy.evaluate(function (modalRoot) { var select = document.querySelector(modalRoot + ' select[name="assignment"]'); select.selectedIndex = 2; + jQuery(select).change(); }, [this.modalRoot]); this.chromy.wait(500); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js index da61b5a71cd..ac94473d01c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/contact-access-rights.js @@ -4,7 +4,7 @@ module.exports = modal.extend({ /** * Opens a ui-select dropdown * - * @return {object} + * @return {Object} */ openDropdown: function (name) { var common = '[ng-model="modalCtrl.selectedData.%{name}"] input'; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js index 0db0f98c122..6d5b9f32309 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/document.js @@ -4,7 +4,7 @@ module.exports = modal.extend({ /** * Opens the "due date" datepicker * - * @return {object} + * @return {Object} */ pickDueDate: function () { this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_date_time"]'); @@ -16,8 +16,8 @@ module.exports = modal.extend({ /** * Shows the given field * - * @param {string} fieldName - * @return {object} + * @param {String} fieldName + * @return {Object} */ showField: function (fieldName) { this.chromy.click(this.modalRoot + ' a[ng-click*="show' + fieldName + 'Field"]'); @@ -28,7 +28,7 @@ module.exports = modal.extend({ /** * Selects an assignee for the document * - * @return {object} + * @return {Object} */ selectAssignee: function () { this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.assignee_contact"] .ui-select-match'); @@ -40,7 +40,7 @@ module.exports = modal.extend({ /** * Selects the type of document * - * @return {object} + * @return {Object} */ selectType: function () { this.chromy.click(this.modalRoot + ' [ng-model="documentModal.document.activity_type_id"] .ui-select-match'); @@ -52,7 +52,7 @@ module.exports = modal.extend({ /** * Opens the given tab * - * @return {object} + * @return {Object} */ showTab: function (tabName) { this.chromy.click(this.modalRoot + ' a[data-target="#' + tabName.toLowerCase() + 'Tab"]'); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js index 22f77825a20..9cde5ef977d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/job-contract.js @@ -6,11 +6,11 @@ module.exports = modal.extend({ /** * Selects the tab with the given title * - * @param {string} tabTitle + * @param {String} tabTitle */ selectTab: function (tabTitle) { this.chromy.evaluate(function (tabTitle) { - // = clickLabel + // = CasperJS.clickLabel() var xPath = './/a[text()="' + tabTitle + '"]'; var link = document.evaluate(xPath, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js index c178799d204..4d4d82a141f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/ssp-leave-request.js @@ -3,6 +3,7 @@ var modal = require('./modal'); module.exports = modal.extend({ /** * Selects tabs like comments or attachments + * * @param {String} tabName like comments or attachments * @return {Object} this object */ diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js index 0ab85339afe..17f847fd616 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/modals/task.js @@ -4,7 +4,7 @@ module.exports = modal.extend({ /** * Opens a date picker * - * @return {object} + * @return {Object} */ pickDate: function () { this.chromy.click(this.modalRoot + ' [ng-model="task.activity_date_time"]'); @@ -16,8 +16,8 @@ module.exports = modal.extend({ /** * Shows a given field * - * @param {string} fieldName - * @return {object} + * @param {String} fieldName + * @return {Object} */ showField: function (fieldName) { this.chromy.click(this.modalRoot + ' a[ng-click*="showField' + fieldName + '"]'); @@ -28,7 +28,7 @@ module.exports = modal.extend({ /** * Selects the task's assignee * - * @return {object} + * @return {Object} */ selectAssignee: function () { this.chromy.click(this.modalRoot + ' [ng-model="task.assignee_contact_id[0]"] .ui-select-match'); @@ -40,7 +40,7 @@ module.exports = modal.extend({ /** * Select the task type * - * @return {object} + * @return {Object} */ selectType: function () { this.chromy.click(this.modalRoot + ' [ng-model="task.activity_type_id"] .ui-select-match'); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js index 62e96419db1..86d39ba7065 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js @@ -3,8 +3,6 @@ var page = require('./page'); module.exports = page.extend({ /** * Navigate to Address Page - * - * @return {*} */ reachAddressPage: function () { this.chromy.click('.webform-next'); @@ -13,8 +11,6 @@ module.exports = page.extend({ /** * Navigate to Contact Info Page - * - * @return {*} */ reachContactInfoPage: function () { this.reachAddressPage(); @@ -24,8 +20,6 @@ module.exports = page.extend({ /** * Navigate to Payroll Page - * - * @return {*} */ reachPayrollPage: function () { this.reachContactInfoPage(); @@ -35,8 +29,6 @@ module.exports = page.extend({ /** * Navigate to Emergency Contact Page - * - * @return {*} */ reachEmergencyContactPage: function () { this.reachPayrollPage(); @@ -46,8 +38,6 @@ module.exports = page.extend({ /** * Navigate to Dependent Page - * - * @return {*} */ reachDependentPage: function () { this.reachEmergencyContactPage(); @@ -58,8 +48,6 @@ module.exports = page.extend({ /** * Navigate to Profile Picture Page - * - * @return {*} */ reachProfilePicturePage: function () { this.reachDependentPage(); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index 8c813bb9649..16532f8f536 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -11,8 +11,8 @@ module.exports = { */ init: function (chromy, clearDialogs) { clearDialogs = typeof clearDialogs !== 'undefined' ? !!clearDialogs : true; - this.chromy = chromy; + !!this.waitForReady && this.waitForReady(); chromy.evaluate(function () { @@ -21,17 +21,12 @@ module.exports = { .result(function (href) { var isAdmin = href.indexOf('civicrm/') > 1; - if (isAdmin) { - chromy.evaluate(function () { - var errorsWrapper = document.querySelector('#content > #console'); - errorsWrapper && (errorsWrapper.style.display = 'none'); - }); - } else { - chromy.evaluate(function () { - var errorsWrapper = document.querySelector('#messages .alert'); - errorsWrapper && (errorsWrapper.style.display = 'none'); - }); - } + chromy.evaluate(function (isAdmin) { + var selector = isAdmin ? '#content > #console' : '#messages .alert'; + var errorsWrapper = document.querySelector(selector); + + errorsWrapper && (errorsWrapper.style.display = 'none'); + }, [isAdmin]); }); if (clearDialogs) { @@ -57,6 +52,7 @@ module.exports = { * Waits for the modal dialog to load. By default it waits for the .modal class * in dialog otherwise user can specify a custom waitSelector. Once model is * visible it loads the respective modalModule (if any) + * * @param {String} modalModule * @param {String} waitSelector * @return {Promise} diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js index 50a69e7ffc1..36ae9949eab 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-hr-resources.js @@ -4,7 +4,7 @@ module.exports = modal.extend({ /** * Opens See Resources section * - * @return {object} + * @return {Object} */ seeResources: function () { this.chromy.click('.fieldset-title'); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js index 8f0af4d6a59..1e4da47fc25 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js @@ -7,7 +7,7 @@ module.exports = page.extend({ waitForReady: function () { this.chromy.waitUntilVisible('.chr_leave-balance-tab'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var spinners = document.querySelectorAll('.spinner'); return Array.prototype.every.call(spinners, function (dom) { diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js index 5217a6113ee..8438eda55fd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js @@ -6,8 +6,6 @@ module.exports = page.extend({ /** * Wait for the page to be ready as it waits for the actions of the first * row of leave requests to be visible - * - * @return {Object} this object */ waitForReady: function () { this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); @@ -65,7 +63,7 @@ module.exports = page.extend({ this.chromy.evaluate(function (leaveType) { var element = document.querySelector('.chr_manage_leave_requests__header div:nth-child(1) > select'); - element.selectedIndex = leaveType;// for TOIL option + element.selectedIndex = leaveType; element.dispatchEvent(new Event('change')); }, [leaveType]); this.chromy.waitUntilVisible('tbody tr:nth-child(1) a'); @@ -82,13 +80,15 @@ module.exports = page.extend({ editRequest: function (row) { this.chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('leave-request-popup-details-tab .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); @@ -97,15 +97,14 @@ module.exports = page.extend({ /** * Apply leave on behalf of staff + * * @param {String} row number corresponding to leave request in the list like leave, sickness or toil - * @return {Promise} */ applyLeaveForStaff: function (leaveType) { var leaveSerialNo = leaveType === 'leave' ? 1 : leaveType === 'sickness' ? 2 : 3; this.chromy.click('.button-container leave-request-record-actions .dropdown-toggle'); this.chromy.click('.button-container li:nth-child(' + leaveSerialNo + ') a'); - this.waitForModal('ssp-leave-request', '.chr_leave-request-modal__form'); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js index 65c23877022..0365ac1f771 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js @@ -7,7 +7,7 @@ module.exports = page.extend({ * Clears the currently selected month from the calendar "Selected Months" * field. * - * @returns {Object} - returns a reference to the page object. + * @return {Object} - returns a reference to the page object. */ clearCurrentlySelectedMonth: function () { this.chromy.click('.chr_leave-calendar__day-selector .close.ui-select-match-close'); @@ -21,7 +21,7 @@ module.exports = page.extend({ * * @param {String} monthName - the month of the name as it appear in the * "Selected Months" options. - * @returns {Object} - returns a reference to the page object. + * @return {Object} - returns a reference to the page object. */ showMonth: function (monthName) { this.chromy.click('.chr_leave-calendar__day-selector input'); @@ -37,7 +37,7 @@ module.exports = page.extend({ * Hovers on top of a leave day visible on the calendar until a tooltip * pops up. * - * @returns {Object} - returns a reference to the page object. + * @return {Object} - returns a reference to the page object. */ showTooltip: function () { var chromy = this.chromy; @@ -55,7 +55,7 @@ module.exports = page.extend({ * Displays the leave information for a particular year in the leave calendar. * * @param {Number} year - the year to select from the absence period options. - * @returns {Object} - returns a reference to the page object. + * @return {Object} - returns a reference to the page object. */ showYear: function (year) { this.chromy.evaluate(function (year) { diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js index c4a8e091a88..77162cfdb0a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js @@ -31,13 +31,15 @@ module.exports = page.extend({ return new Promise(function (resolve) { chromy.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.modal-content .spinner:nth-child(1)'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('leave-request-popup-details-tab .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); @@ -102,8 +104,9 @@ module.exports = page.extend({ openSection: function (section) { this.chromy.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js index 2a5e0faed52..ef748d3bd91 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js @@ -15,6 +15,7 @@ module.exports = modal.extend({ waitForReady: function () { this.chromy.evaluate(function () { var tempStyle = document.createElement('style'); + tempStyle.type = 'text/css'; tempStyle.innerHTML = '#reportsIframe { height: 1000px !important; }'; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js index a4055ac42cb..d4c60b7a599 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js @@ -7,8 +7,9 @@ module.exports = modal.extend({ openCompletedTasksModal: function () { this.chromy.click('.pane-views-tasks-block a.show-complete-tasks'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.loading-spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); this.chromy.waitUntilVisible('.view-Tasks'); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js index bb4ee6b4454..c7f6252509e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-vacancies.js @@ -4,11 +4,11 @@ module.exports = modal.extend({ /** * Opens More Details section * - * @return {object} + * @return {Object} */ showMoreDetails: function () { this.chromy.click('.fieldset-title'); - this.chromy.wait(2000); + this.chromy.wait(2000); // wait for animation to complete return this; } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js index 637648c1ac9..4449a86a9fd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence.js @@ -8,14 +8,15 @@ module.exports = tab.extend({ /** * Opens one of the absence sub tabs * - * @param {string} tabId - * @return {object} resolves with the tab page object + * @param {String} tabId + * @return {Object} resolves with the tab page object */ openSubTab: function (tabId) { return new Promise(function (resolve) { var tab = require('./absence/' + tabId); this.chromy.click('[heading="' + tab.tabTitle + '"] > a'); + resolve(tab.init(this.chromy, false)); }.bind(this)); } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js index edeb15e2419..5edbccf58e6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/absence/entitlements.js @@ -15,13 +15,15 @@ module.exports = tab.extend({ this.chromy.wait('annual-entitlements'); // Waits for spinners to hide which indicates the load of the data this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('contract-entitlements .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('annual-entitlements .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js index 2cc3da21a27..379d9ead534 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/documents.js @@ -12,8 +12,9 @@ module.exports = tab.extend({ waitForReady: function () { this.chromy.waitUntilVisible('form[name="formDocuments"]'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.ct-spinner-cover'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); } diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js index 745b0f874da..ea43e38cfc9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js @@ -7,7 +7,7 @@ module.exports = tab.extend({ /** * Clicks on the delete button * - * @return {object} + * @return {Object} */ attemptDelete: function () { this.chromy.click('.hrjc-list-contract-item:nth-child(1) .btn-danger'); @@ -17,7 +17,7 @@ module.exports = tab.extend({ /** * Opens the modal of an already existing contract * - * @param {string} mode "correct" or "revision" + * @param {String} mode "correct" or "revision" * @return {Promise} resolves with the job contract modal object */ openContractModal: function (mode) { @@ -25,6 +25,7 @@ module.exports = tab.extend({ return new Promise(function (resolve) { this.chromy.click('[ng-click="modalContract(\'' + param + '\')"]'); + resolve(this.waitForModal('job-contract')); }.bind(this)); }, @@ -37,6 +38,7 @@ module.exports = tab.extend({ openNewContractModal: function () { return new Promise(function (resolve) { this.chromy.click('.hrjc-btn-add-contract > .btn-primary'); + resolve(this.waitForModal('job-contract')); }.bind(this)); }, @@ -51,8 +53,9 @@ module.exports = tab.extend({ waitForReady: function () { this.chromy.waitUntilVisible('.hrjc-summary'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.hrjc-list-contract .spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); @@ -62,7 +65,7 @@ module.exports = tab.extend({ /** * Shows the full history of a contract * - * @return {object} + * @return {Object} */ showFullHistory: function () { this.chromy.click('[heading="Full History"] > a'); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js index 0a6fa683585..f9914669fc9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/tab.js @@ -3,7 +3,8 @@ var page = require('../page'); module.exports = page.extend({ /** * Defines that the tab is ready when the a specific selector is visible - * @return {boolean} + * + * @return {Boolean} */ waitForReady: function () { this.chromy.waitUntilVisible(this.readySelector); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js index f7450aed637..c8143eb9822 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tasks.js @@ -37,7 +37,7 @@ module.exports = page.extend({ /** * Opens the advanced filters * - * @return {object} + * @return {Object} */ advancedFilters: function () { this.chromy.click('a[ng-click*="isCollapsed.filterAdvanced"]'); @@ -49,8 +49,8 @@ module.exports = page.extend({ /** * Shows the given edit-in-place field * - * @param {string} fieldName - * @return {object} + * @param {String} fieldName + * @return {Object} */ inPlaceEdit: function (fieldName) { this.chromy.click(editableSelectors[fieldName]); @@ -68,8 +68,9 @@ module.exports = page.extend({ return new Promise(function (resolve) { this.chromy.click(taskSelector + ' .task-title > a[ng-click*="modalTask"]'); this.chromy.wait(function () { - // = waitWhileVisible + // = CasperJS.waitWhileVisible() var dom = document.querySelector('.spinner'); + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); }); @@ -88,7 +89,7 @@ module.exports = page.extend({ /** * Expands the "show more" area of the first task of the list * - * @return {object} + * @return {Object} */ showMore: function () { this.chromy.click(taskSelector + ' a[ng-click*="isCollapsed"]'); @@ -101,7 +102,7 @@ module.exports = page.extend({ /** * Shows the dropdown of the actions available on any given task * - * @return {object} + * @return {Object} */ taskActions: function () { this.chromy.click(taskSelector + ' .ct-context-menu-toggle'); diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 32d2a1f01ca..5fcac54d1b1 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -14,6 +14,7 @@ var Promise = require('es6-promise').Promise; var utils = require('../utils'); var BACKSTOP_DIR = path.join(__dirname, '..', '..', 'backstop_data'); +var CHROMY_STARTING_PORT = 9222; var DEFAULT_USER = 'civihr_admin'; var CONFIG_TPL = { 'url': 'http://%{site-host}' }; var FILES = { @@ -224,6 +225,7 @@ function touchSiteConfigFile () { fs.readFileSync(FILES.siteConfig); } catch (err) { fs.writeFileSync(FILES.siteConfig, JSON.stringify(CONFIG_TPL, null, 2)); + created = true; } @@ -244,7 +246,6 @@ function touchSiteConfigFile () { */ function writeCookies () { var cookiesDir = path.join(BACKSTOP_DIR, 'cookies'); - var port = 9222; var config = siteConfig(); var users = ['admin', 'civihr_admin', 'civihr_manager', 'civihr_staff']; @@ -252,7 +253,7 @@ function writeCookies () { fs.mkdirSync(cookiesDir); } - return Promise.all(users.map(function (user) { + return Promise.all(users.map(function (user, index) { return new Promise(function (resolve, reject) { var cookieFilePath = path.join(cookiesDir, user + '.json'); @@ -267,7 +268,7 @@ function writeCookies () { return reject(new Error(err)); } - chromy = new Chromy({ port: port++, gotoTimeout: 60000 }); + chromy = new Chromy({ port: CHROMY_STARTING_PORT + index, gotoTimeout: 60000 }); chromy.chain() .goto(config.url) .goto(loginUrl) From 4bca1256cbeb396b75a807124917374b0e4ca7ad Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 29 Mar 2018 06:39:50 +0200 Subject: [PATCH 074/251] PCHR-3221: Add wait logic for ssp tasks page --- .../backstop_data/engine_scripts/ssp/tasks-show.js | 7 +++++++ .../backstop_data/page-objects/ssp-tasks.js | 8 ++++++++ .../backstop_data/scenarios/ssp-tasks.json | 3 ++- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show.js diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show.js new file mode 100644 index 00000000000..2612e9d19f8 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show.js @@ -0,0 +1,7 @@ +'use strict'; + +var page = require('../../page-objects/ssp-tasks'); + +module.exports = function (engine) { + page.init(engine); +}; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js index d4c60b7a599..7a690d17e50 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js @@ -21,5 +21,13 @@ module.exports = modal.extend({ openCreateNewTaskModal: function () { this.chromy.click('.create-new-task'); this.chromy.waitUntilVisible('#civihr-employee-portal-civi-tasks-form'); + }, + + /** + * The page always gives false positives for some reason in Chromy, so we need + * to wait a couple of seconds for it to "stabilize" before taking the screenshot + */ + waitForReady: function () { + this.chromy.wait(2000); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json index d6e071e383e..79dfc5fb3d5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-tasks.json @@ -2,7 +2,8 @@ "scenarios": [ { "label": "SSP / Tasks", - "url": "{{siteUrl}}/tasks-and-documents" + "url": "{{siteUrl}}/tasks-and-documents", + "onReadyScript": "ssp/tasks-show.js" }, { "label": "SSP / Tasks / Show Completed tasks", From f5abe42a77ec9da0a33f777edd7dd6191504f284 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 29 Mar 2018 06:40:28 +0200 Subject: [PATCH 075/251] PCHR-3221: Set wait timeout back to 12 seconds --- uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json index 0c71994eb0c..901999ffa99 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json @@ -19,7 +19,7 @@ "engine": "chrome", "engineFlags": [], "engineOptions": { - "waitTimeout": 6000 + "waitTimeout": 12000 }, "asyncCaptureLimit": 1, "asyncCompareLimit": 50, From fff47b24b0739ba73b30a7c57c4b0683d6cd2ed1 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 29 Mar 2018 16:12:50 +0200 Subject: [PATCH 076/251] PCHR-3221: Get contact ids via drupal usernames --- .../scenarios/contact-access-rights.json | 4 +- .../scenarios/contact-summary.json | 4 +- .../backstop_data/scenarios/tab-absence.json | 14 ++-- .../scenarios/tab-documents.json | 2 +- .../scenarios/tab-job-contract.json | 24 +++--- .../scenarios/tab-job-roles.json | 18 ++--- .../backstop_data/scenarios/tab-tasks.json | 2 +- .../gulp/tasks/backstopjs.js | 77 ++++++++++--------- 8 files changed, 75 insertions(+), 70 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json index f752a64f9d2..9ee015ff5f1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-access-rights.json @@ -2,12 +2,12 @@ "scenarios": [ { "label": "Contact Access Rights", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:admin}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_admin}}", "onReadyScript": "contact-access-rights/show.js" }, { "label": "Contact Access Rights / Open ui select", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:admin}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_admin}}", "onReadyScript": "contact-access-rights/open-ui-select.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json index fd9c3c7df50..5c8c89dc0c1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/contact-summary.json @@ -2,12 +2,12 @@ "scenarios": [ { "label": "Contact Summary", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}", "onReadyScript": "contact-summary/show.js" }, { "label": "Contact Summary / Actions", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}", "onReadyScript": "contact-summary/show-actions.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json index 50d738a53ae..257eddf7c5d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-absence.json @@ -2,37 +2,37 @@ "scenarios": [ { "label": "Absence / Report", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-report.js" }, { "label": "Absence / Report / Open Section", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-report-open-section.js" }, { "label": "Absence / Report / Actions", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-report-actions.js" }, { "label": "Absence / Calendar / Current Month", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-calendar.js" }, { "label": "Absence / Entitlements", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-entitlements.js" }, { "label": "Absence / Work Patterns", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-work-patterns.js" }, { "label": "Absence / Work Patterns / Custom Work Patterns Modal", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=absence", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=absence", "onReadyScript": "contact-summary/absence/tab-work-patterns-modal.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json index 42091ef6989..f9b6deb20bc 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-documents.json @@ -2,7 +2,7 @@ "scenarios": [ { "label": "Documents", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=cividocuments", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=cividocuments", "onReadyScript": "contact-summary/documents/show.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json index e87ec65e9f5..d09ea095dca 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-contract.json @@ -2,62 +2,62 @@ "scenarios": [ { "label": "Job Contract", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/summary.js" }, { "label": "Job Contract / Full History", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/full-history.js" }, { "label": "Job Contract / Delete Dialog", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/delete-dialog.js" }, { "label": "Job Contract / Modal / Tab / General", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-general.js" }, { "label": "Job Contract / Modal / Tab / Hours", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-hours.js" }, { "label": "Job Contract / Modal / Tab / Pay", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-pay.js" }, { "label": "Job Contract / Modal / Tab / Leave", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-leave.js" }, { "label": "Job Contract / Modal / Tab / Insurance", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-insurance.js" }, { "label": "Job Contract / Modal / Tab / Pension", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-pension.js" }, { "label": "Job Contract / Modal / Tab / Funding", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/tab-funding.js" }, { "label": "Job Contract / Modal / Correct Error ", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/correct-error.js" }, { "label": "Job Contract / Modal / Change Terms ", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobcontract", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobcontract", "onReadyScript": "contact-summary/job-contract/change-terms.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json index 8cc9123916c..37bbbd1c856 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-job-roles.json @@ -2,47 +2,47 @@ "scenarios": [ { "label": "Job Roles / Basic Details", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/basic-details.js" }, { "label": "Job Roles / Funding", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/funding.js" }, { "label": "Job Roles / Cost Centres", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/cost-centres.js" }, { "label": "Job Roles / Delete Dialog", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/delete-dialog.js" }, { "label": "Job Roles / Add New", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/add-new.js" }, { "label": "Job Roles / Basic Details / Edit", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/basic-details-edit.js" }, { "label": "Job Roles / Basic Details / Open ui select", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/open-ui-select.js" }, { "label": "Job Roles / Funding / Edit", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/funding-edit.js" }, { "label": "Job Roles / Cost Centres / Edit", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=hrjobroles", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=hrjobroles", "onReadyScript": "contact-summary/job-roles/cost-centres-edit.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json index 04da26fc4d0..37315a4f842 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/tab-tasks.json @@ -2,7 +2,7 @@ "scenarios": [ { "label": "Tasks", - "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:staff}}&selectedChild=civitasks", + "url": "{{siteUrl}}/civicrm/contact/view?cid={{contactId:civihr_staff}}&selectedChild=civitasks", "onReadyScript": "contact-summary/tasks/show.js" } ] diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 5fcac54d1b1..c3ccaa7d112 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -4,6 +4,7 @@ var backstopjs = require('backstopjs'); var clean = require('gulp-clean'); var Chromy = require('chromy'); var exec = require('child_process').exec; +var execSync = require('child_process').execSync; var file = require('gulp-file'); var fs = require('fs'); var gulp = require('gulp'); @@ -35,10 +36,10 @@ module.exports = ['reference', 'test', 'openReport', 'approve'].map(function (ac /** * Concatenates all the scenarios (if no specific scenario file is specified) * - * @param {Object} contactIdsByRoles + * @param {Object} usersIds * @return {Array} */ -function buildScenariosList (contactIdsByRoles) { +function buildScenariosList (usersIds) { var config = siteConfig(); var dirPath = path.join(BACKSTOP_DIR, 'scenarios'); @@ -58,7 +59,7 @@ function buildScenariosList (contactIdsByRoles) { return _.assign(scenario, { cookiePath: path.join(BACKSTOP_DIR, 'cookies', user + '.json'), count: '(' + (index + 1) + ' of ' + scenarios.length + ')', - url: constructScenarioUrl(config.url, scenario.url, contactIdsByRoles) + url: constructScenarioUrl(config.url, scenario.url, usersIds) }); }) .value(); @@ -87,14 +88,14 @@ function cleanUpAndNotify (success) { * * @param {String} siteUrl * @param {String} scenarioUrl - * @param {Object} contactIdsByRoles + * @param {Object} usersIds * @return {String} */ -function constructScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles) { +function constructScenarioUrl (siteUrl, scenarioUrl, usersIds) { return scenarioUrl .replace('{{siteUrl}}', siteUrl) - .replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, contactRole) { - return contactIdsByRoles[contactRole]; + .replace(/\{\{contactId:([^}]+)\}\}/g, function (fullMatch, user) { + return usersIds[user].civi; }); } @@ -108,7 +109,7 @@ function constructScenarioUrl (siteUrl, scenarioUrl, contactIdsByRoles) { function createTempConfigFile () { var content = JSON.parse(fs.readFileSync(FILES.tpl)); - return getRolesAndIDs() + return getUsersIds() .then(buildScenariosList) .then(function (scenarios) { content.scenarios = scenarios; @@ -118,41 +119,45 @@ function createTempConfigFile () { } /** - * Fetches civicrm contacts whose emails match "civihr_" pattern - * and returns a map of their "roles" connected to their IDs. - * Requires 'civihr_(staff|manager|admin)@...' to be presented in DB, - * otherwise will throw an error. + * Given a set of UF matches, it finds the contact with the specified drupal id * - * @return {Promise} resolved with {Object}, ex. { 'staff': 204, ... etc } + * @param {Array} ufMatches + * @param {Int} drupalId + * @return {Object} */ -function getRolesAndIDs () { - return new Promise(function (resolve, reject) { - exec('cv api contact.get sequential=1 email="civihr_%" contact_type="Individual" return="email,contact_id"', function (err, result) { - var idsByRoles, missingRoles; - - if (err) { - return reject(new Error('Unable to fetch contact roles and IDs: ' + err)); - } - - idsByRoles = _(JSON.parse(result).values) - .map(function (contact) { - var role = contact.email.split('@')[0].split('_')[1]; +function findContactByDrupalId (ufMatches, drupalId) { + return _.find(ufMatches, function (match) { + return match.uf_id === drupalId; + }); +} - return [role, contact.contact_id]; - }) - .fromPairs() - .value(); +/** + * Creates and returns a mapping of users to their drupal and civi ids + * + * To fetch the drupal ids, the `drush user-information` command is used. Those + * ids are used to fetch the civi ids by using the UFMatch api + * + * @return {Promise} resolved with {Object}, ex. { civihr_staff: { drupal: 1, civi: 2 } } + */ +function getUsersIds () { + return new Promise(function (resolve, reject) { + var usersIds, ufMatches; + var userInfoCmd = 'drush user-information admin,civihr_admin,civihr_manager,civihr_staff --format=json'; + var ufMatchCmd = 'echo \'{ "uf_id": { "IN":[%{uids}] } }\' | cv api UFMatch.get sequential=1'; - missingRoles = _.difference(['staff', 'manager', 'admin'], _.keys(idsByRoles)); + usersIds = _.transform(JSON.parse(execSync(userInfoCmd)), function (result, user) { + result[user.name] = { drupal: user.uid }; + }); - if (missingRoles.length) { - return reject(new Error('Required users with emails ' + missingRoles.map(function (role) { - return 'civihr_' + role + '@*'; - }).join(', ') + ' were not found in the database')); - } + ufMatchCmd = ufMatchCmd.replace('%{uids}', _.map(usersIds, 'drupal').join(',')); + ufMatches = JSON.parse(execSync(ufMatchCmd)).values; - resolve(idsByRoles); + usersIds = _.transform(usersIds, function (result, userIds, name) { + userIds.civi = findContactByDrupalId(ufMatches, userIds.drupal).contact_id; + result[name] = userIds; }); + + resolve(usersIds); }); } From 6f15f8e9250fea53e312f700468cd6651f979e9a Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 29 Mar 2018 16:27:43 +0200 Subject: [PATCH 077/251] PCHR-3221: Use constant for users list --- uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index c3ccaa7d112..17287759c65 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -17,6 +17,7 @@ var utils = require('../utils'); var BACKSTOP_DIR = path.join(__dirname, '..', '..', 'backstop_data'); var CHROMY_STARTING_PORT = 9222; var DEFAULT_USER = 'civihr_admin'; +var USERS = ['admin', 'civihr_admin', 'civihr_manager', 'civihr_staff']; var CONFIG_TPL = { 'url': 'http://%{site-host}' }; var FILES = { siteConfig: path.join(BACKSTOP_DIR, 'site-config.json'), @@ -142,7 +143,7 @@ function findContactByDrupalId (ufMatches, drupalId) { function getUsersIds () { return new Promise(function (resolve, reject) { var usersIds, ufMatches; - var userInfoCmd = 'drush user-information admin,civihr_admin,civihr_manager,civihr_staff --format=json'; + var userInfoCmd = 'drush user-information ' + USERS.join(',') + ' --format=json'; var ufMatchCmd = 'echo \'{ "uf_id": { "IN":[%{uids}] } }\' | cv api UFMatch.get sequential=1'; usersIds = _.transform(JSON.parse(execSync(userInfoCmd)), function (result, user) { @@ -252,13 +253,12 @@ function touchSiteConfigFile () { function writeCookies () { var cookiesDir = path.join(BACKSTOP_DIR, 'cookies'); var config = siteConfig(); - var users = ['admin', 'civihr_admin', 'civihr_manager', 'civihr_staff']; if (!fs.existsSync(cookiesDir)) { fs.mkdirSync(cookiesDir); } - return Promise.all(users.map(function (user, index) { + return Promise.all(USERS.map(function (user, index) { return new Promise(function (resolve, reject) { var cookieFilePath = path.join(cookiesDir, user + '.json'); From bc820098d1153abdf544da51ab0768b658b41744 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 29 Mar 2018 16:52:12 +0200 Subject: [PATCH 078/251] PCHR-3221: Use execSync exclusively --- .../gulp/tasks/backstopjs.js | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 17287759c65..6e180f0dc8d 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -3,7 +3,6 @@ var argv = require('yargs').argv; var backstopjs = require('backstopjs'); var clean = require('gulp-clean'); var Chromy = require('chromy'); -var exec = require('child_process').exec; var execSync = require('child_process').execSync; var file = require('gulp-file'); var fs = require('fs'); @@ -260,33 +259,28 @@ function writeCookies () { return Promise.all(USERS.map(function (user, index) { return new Promise(function (resolve, reject) { + var chromy, loginUrl; var cookieFilePath = path.join(cookiesDir, user + '.json'); if (fs.existsSync(cookieFilePath)) { fs.unlinkSync(cookieFilePath); } - exec('drush uli --name=' + user + ' --uri=' + config.url + ' --browser=0', function (err, loginUrl) { - var chromy; - - if (err) { - return reject(new Error(err)); - } - - chromy = new Chromy({ port: CHROMY_STARTING_PORT + index, gotoTimeout: 60000 }); - chromy.chain() - .goto(config.url) - .goto(loginUrl) - .getCookies() - .result(function (cookies) { - fs.writeFileSync(cookieFilePath, JSON.stringify(cookies)); - }) - .end() - .then(function () { - chromy.close(); - resolve(); - }); - }); + loginUrl = execSync('drush uli --name=' + user + ' --uri=' + config.url + ' --browser=0', { encoding: 'utf8' }); + chromy = new Chromy({ port: CHROMY_STARTING_PORT + index, gotoTimeout: 60000 }); + + chromy.chain() + .goto(config.url) + .goto(loginUrl) + .getCookies() + .result(function (cookies) { + fs.writeFileSync(cookieFilePath, JSON.stringify(cookies)); + }) + .end() + .then(function () { + chromy.close(); + resolve(); + }); }); })); } From 7a2b7975efbe9783d72a349d250354141d50647d Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 29 Mar 2018 17:51:42 +0200 Subject: [PATCH 079/251] PCHR-3221: Minor fixes --- uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js index 6e180f0dc8d..e3dc1c4fd2b 100644 --- a/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js +++ b/uk.co.compucorp.civicrm.hrcore/gulp/tasks/backstopjs.js @@ -121,8 +121,8 @@ function createTempConfigFile () { /** * Given a set of UF matches, it finds the contact with the specified drupal id * - * @param {Array} ufMatches - * @param {Int} drupalId + * @param {Array} ufMatches + * @param {Number} drupalId * @return {Object} */ function findContactByDrupalId (ufMatches, drupalId) { From aaccea2e165e5fe651ca5af0f13546c7a0850c6b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 9 Apr 2018 15:53:47 +0200 Subject: [PATCH 080/251] PCHR-3221: Use BackstopJS canary --- .../npm-shrinkwrap.json | 75 ++++--------------- uk.co.compucorp.civicrm.hrcore/package.json | 2 +- 2 files changed, 14 insertions(+), 63 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json b/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json index e523a618824..8a0e8011853 100644 --- a/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json +++ b/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json @@ -646,12 +646,22 @@ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", "dev": true }, + "backstop-twentytwenty": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/backstop-twentytwenty/-/backstop-twentytwenty-1.0.4.tgz", + "integrity": "sha512-sENfpossNAbVKZjTzBU6bkbR1vIb7t6brjqH9ZMEIYh/RyCIGFM3BSgERzh+tdwpAVXHSbIV1gQRrtzBYzUrjw==", + "dev": true, + "requires": { + "react": "15.6.2" + } + }, "backstopjs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-3.2.0.tgz", - "integrity": "sha512-/drgHwUIfZiFLwXmpFVnK9ozxdbLFzcmgwQ3Cn+zqkLO6WwgI/K0TtO61aLXAQPwS2oHIjn46N7HwAFHlWEH0g==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-3.2.3.tgz", + "integrity": "sha512-YURuEPLq2InkfTW9BRlXRWMDiluYZn7+vQNUpwTRVnKH66Bk/KCXTDBIbcqTZgJcR8DLoywOQYAOJG9RPBLJmA==", "dev": true, "requires": { + "backstop-twentytwenty": "1.0.4", "casperjs": "1.1.4", "chalk": "1.1.3", "chromy": "0.5.11", @@ -674,7 +684,6 @@ "react-redux": "5.0.7", "react-sticky": "6.0.1", "react-toggle-button": "2.2.0", - "react-twentytwenty": "1.1.0", "redux": "3.7.2", "sinon": "1.17.7", "styled-components": "2.4.0", @@ -1287,17 +1296,6 @@ "supports-color": "2.0.0" } }, - "child-process-promise": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", - "integrity": "sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=", - "dev": true, - "requires": { - "cross-spawn": "4.0.2", - "node-version": "1.1.3", - "promise-polyfill": "6.1.0" - } - }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -1388,22 +1386,6 @@ "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==", "dev": true }, - "civicrm-cv": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/civicrm-cv/-/civicrm-cv-0.1.2.tgz", - "integrity": "sha1-prn+pVahci1Km3ChHGSHVXGmNKg=", - "dev": true, - "requires": { - "child-process-promise": "2.2.1" - } - }, - "civicrm-scssroot": { - "version": "git://github.com/totten/civicrm-scssroot.git#3fc126e91ea503420daedc82425e9b85085707f6", - "dev": true, - "requires": { - "civicrm-cv": "0.1.2" - } - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1830,16 +1812,6 @@ } } }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" - } - }, "cryptiles": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", @@ -8489,12 +8461,6 @@ "dev": true, "optional": true }, - "node-version": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz", - "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==", - "dev": true - }, "node.extend": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.0.tgz", @@ -9533,12 +9499,6 @@ "asap": "2.0.6" } }, - "promise-polyfill": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=", - "dev": true - }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", @@ -9908,15 +9868,6 @@ "react-motion": "0.5.2" } }, - "react-twentytwenty": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-twentytwenty/-/react-twentytwenty-1.1.0.tgz", - "integrity": "sha512-cSwoNCygg7K68yBmkIvOC0sPstkwCGlDpvbI93bJEyAuan3zwW7WFMY58uIfQMONz9qtqfcdmoS+Wy/FMpmnVA==", - "dev": true, - "requires": { - "prop-types": "15.6.1" - } - }, "read-chunk": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz", diff --git a/uk.co.compucorp.civicrm.hrcore/package.json b/uk.co.compucorp.civicrm.hrcore/package.json index 8d28217ad27..3bce79924b3 100644 --- a/uk.co.compucorp.civicrm.hrcore/package.json +++ b/uk.co.compucorp.civicrm.hrcore/package.json @@ -6,7 +6,7 @@ }, "devDependencies": { "ansi-colors": "^1.0.1", - "backstopjs": "^3.2.0", + "backstopjs": "^3.2.3", "civicrm-scssroot": "git://github.com/totten/civicrm-scssroot.git#v0.1.1", "detect-installed": "^2.0.4", "es6-promise": "^4.2.2", From 7715ca9abc4e54c40e19348a28f0ed6e21c52267 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 9 Apr 2018 15:55:20 +0200 Subject: [PATCH 081/251] PCHR-3221: Use package-lock file again --- ...{npm-shrinkwrap.json => package-lock.json} | 4068 ++++++++--------- 1 file changed, 1893 insertions(+), 2175 deletions(-) rename uk.co.compucorp.civicrm.hrcore/{npm-shrinkwrap.json => package-lock.json} (85%) diff --git a/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json b/uk.co.compucorp.civicrm.hrcore/package-lock.json similarity index 85% rename from uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json rename to uk.co.compucorp.civicrm.hrcore/package-lock.json index 8a0e8011853..315ad84d8fb 100644 --- a/uk.co.compucorp.civicrm.hrcore/npm-shrinkwrap.json +++ b/uk.co.compucorp.civicrm.hrcore/package-lock.json @@ -16,9 +16,9 @@ "dev": true }, "@types/node": { - "version": "9.4.7", - "resolved": "http://registry.npmjs.org/@types/node/-/node-9.4.7.tgz", - "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.2.tgz", + "integrity": "sha512-UWkRY9X7RQHp5OhhRIIka58/gVVycL1zHZu0OTsT5LI86ABaMOSbUjAl+b0FeDhQcxclrkyft3kW5QWdMRs8wQ==", "dev": true }, "@types/rimraf": { @@ -44,19 +44,19 @@ "dev": true }, "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.17", + "mime-types": "2.1.18", "negotiator": "0.6.1" } }, "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "acorn-dynamic-import": { @@ -66,6 +66,24 @@ "dev": true, "requires": { "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", + "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "xtend": "4.0.1" } }, "addressparser": { @@ -82,21 +100,12 @@ "dev": true }, "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "dev": true, "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } + "es6-promisify": "5.0.0" } }, "ajv": { @@ -106,7 +115,7 @@ "dev": true, "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -126,17 +135,6 @@ "kind-of": "3.2.2", "longest": "1.0.1", "repeat-string": "1.6.1" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } } }, "amdefine": { @@ -159,13 +157,6 @@ "safe-buffer": "5.1.1" }, "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true, - "optional": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -196,9 +187,9 @@ } }, "ansi-colors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.0.1.tgz", - "integrity": "sha512-yopkAU0ZD/WQ56Tms3xLn6jRuX3SyUMAVi0FdmDIbmmnHW3jHiI1sQFdUl3gfVddjnrsP3Y6ywFKvCRopvoVIA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { "ansi-wrap": "0.1.0" @@ -256,104 +247,13 @@ "dev": true }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "2.3.11", + "micromatch": "3.1.10", "normalize-path": "2.1.1" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - } } }, "aproba": { @@ -375,7 +275,7 @@ "dev": true, "requires": { "delegates": "1.0.0", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "arr-diff": { @@ -475,6 +375,12 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -494,9 +400,9 @@ "dev": true }, "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { "bn.js": "4.11.8", @@ -526,9 +432,9 @@ "dev": true }, "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", "dev": true, "optional": true }, @@ -539,15 +445,23 @@ "dev": true, "requires": { "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } } }, "async": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz", - "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "async-chain-proxy": { @@ -584,9 +498,9 @@ "dev": true }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", "dev": true }, "aws-sign2": { @@ -596,9 +510,9 @@ "dev": true }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", "dev": true }, "axios": { @@ -618,8 +532,16 @@ "dev": true, "requires": { "babel-runtime": "6.26.0", - "core-js": "2.5.3", + "core-js": "2.5.5", "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", + "dev": true + } } }, "babel-runtime": { @@ -628,10 +550,16 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.3", + "core-js": "2.5.5", "regenerator-runtime": "0.11.1" }, "dependencies": { + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", + "dev": true + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", @@ -668,7 +596,7 @@ "fs-extra": "0.30.0", "jump.js": "1.0.2", "junitwriter": "0.3.1", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimist": "1.2.0", "node-resemble-js": "0.2.0", "object-hash": "1.1.5", @@ -682,7 +610,7 @@ "react-dom": "15.6.2", "react-modal": "3.3.2", "react-redux": "5.0.7", - "react-sticky": "6.0.1", + "react-sticky": "6.0.2", "react-toggle-button": "2.2.0", "redux": "3.7.2", "sinon": "1.17.7", @@ -709,8 +637,54 @@ "component-emitter": "1.2.1", "define-property": "1.0.0", "isobject": "3.0.1", - "mixin-deep": "1.3.0", + "mixin-deep": "1.3.1", "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "base64-arraybuffer": { @@ -720,9 +694,9 @@ "dev": true }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", "dev": true }, "base64id": { @@ -806,6 +780,13 @@ "readable-stream": "2.0.6" }, "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true, + "optional": true + }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", @@ -845,6 +826,12 @@ "inherits": "2.0.3" } }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, "bmp-js": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz", @@ -867,12 +854,20 @@ "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.19", "on-finished": "2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.15" + "type-is": "1.6.16" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + } } }, "bonjour": { @@ -895,13 +890,13 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -909,22 +904,32 @@ } }, "braces": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { "arr-flatten": "1.1.0", "array-unique": "0.3.2", - "define-property": "1.0.0", "extend-shallow": "2.0.1", "fill-range": "4.0.0", "isobject": "3.0.1", "repeat-element": "1.1.2", - "snapdragon": "0.8.1", + "snapdragon": "0.8.2", "snapdragon-node": "2.1.1", "split-string": "3.1.0", - "to-regex": "3.0.1" + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "brorand": { @@ -934,9 +939,9 @@ "dev": true }, "browser-pack": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.3.tgz", - "integrity": "sha512-Jo+RYsn8X8OhyP9tMXXg0ueR2fW696HUu1Hf3/DeiwNean1oGiPtdgGRNuUHBpPHzBH3x4n1kzAlgOgHSIq88g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { "JSONStream": "1.3.2", @@ -944,7 +949,7 @@ "defined": "1.0.0", "safe-buffer": "5.1.1", "through2": "2.0.3", - "umd": "3.0.1" + "umd": "3.0.3" } }, "browser-resolve": { @@ -972,10 +977,10 @@ "requires": { "JSONStream": "1.3.2", "assert": "1.4.1", - "browser-pack": "6.0.3", + "browser-pack": "6.1.0", "browser-resolve": "1.11.2", "browserify-zlib": "0.2.0", - "buffer": "5.0.8", + "buffer": "5.1.0", "cached-path-relative": "1.0.1", "concat-stream": "1.5.2", "console-browserify": "1.1.0", @@ -991,8 +996,8 @@ "htmlescape": "1.1.1", "https-browserify": "1.0.0", "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", + "insert-module-globals": "7.0.6", + "labeled-stream-splicer": "2.0.1", "module-deps": "4.1.1", "os-browserify": "0.3.0", "parents": "1.0.1", @@ -1001,15 +1006,15 @@ "punycode": "1.4.1", "querystring-es3": "0.2.1", "read-only-stream": "2.0.0", - "readable-stream": "2.3.3", - "resolve": "1.5.0", + "readable-stream": "2.3.6", + "resolve": "1.7.0", "shasum": "1.0.2", "shell-quote": "1.6.1", "stream-browserify": "2.0.1", - "stream-http": "2.8.0", + "stream-http": "2.8.1", "string_decoder": "1.0.3", "subarg": "1.0.0", - "syntax-error": "1.3.0", + "syntax-error": "1.4.0", "through2": "2.0.3", "timers-browserify": "1.4.2", "tty-browserify": "0.0.0", @@ -1052,13 +1057,19 @@ } } }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "process": { @@ -1066,13 +1077,37 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "0.11.10" + } } } }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { "buffer-xor": "1.0.3", @@ -1089,7 +1124,7 @@ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { - "browserify-aes": "1.1.1", + "browserify-aes": "1.2.0", "browserify-des": "1.0.0", "evp_bytestokey": "1.0.3" } @@ -1140,13 +1175,13 @@ } }, "buffer": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", - "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" + "base64-js": "1.2.3", + "ieee754": "1.1.11" } }, "buffer-equal": { @@ -1155,6 +1190,12 @@ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", "dev": true }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", @@ -1273,14 +1314,6 @@ "requires": { "align-text": "0.1.4", "lazy-cache": "1.0.4" - }, - "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - } } }, "chalk": { @@ -1296,40 +1329,49 @@ "supports-color": "2.0.0" } }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "child-process-promise": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", + "integrity": "sha1-RzChHvYQ+tRQuPIjx50x172tgHQ=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "cross-spawn": "4.0.2", + "node-version": "1.1.3", + "promise-polyfill": "6.1.0" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "lru-cache": "4.1.2", + "which": "1.3.0" } } } }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, "chrome-launcher": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.10.2.tgz", @@ -1338,7 +1380,7 @@ "requires": { "@types/core-js": "0.9.46", "@types/mkdirp": "0.3.29", - "@types/node": "9.4.7", + "@types/node": "9.6.2", "@types/rimraf": "0.0.28", "is-wsl": "1.1.0", "lighthouse-logger": "1.0.1", @@ -1386,6 +1428,22 @@ "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==", "dev": true }, + "civicrm-cv": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/civicrm-cv/-/civicrm-cv-0.1.2.tgz", + "integrity": "sha1-prn+pVahci1Km3ChHGSHVXGmNKg=", + "dev": true, + "requires": { + "child-process-promise": "2.2.1" + } + }, + "civicrm-scssroot": { + "version": "git://github.com/totten/civicrm-scssroot.git#3fc126e91ea503420daedc82425e9b85085707f6", + "dev": true, + "requires": { + "civicrm-cv": "0.1.2" + } + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -1406,81 +1464,24 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-buffer": { @@ -1496,14 +1497,14 @@ "dev": true }, "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.6" } }, "co": { @@ -1535,9 +1536,9 @@ "dev": true }, "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", "dev": true }, "combine-lists": { @@ -1546,7 +1547,7 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "combine-source-map": { @@ -1562,9 +1563,9 @@ } }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { "delayed-stream": "1.0.0" @@ -1601,19 +1602,11 @@ "dev": true, "requires": { "mime-db": "1.33.0" - }, - "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - } } }, "compression": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "dev": true, "requires": { @@ -1624,33 +1617,6 @@ "on-headers": "1.0.1", "safe-buffer": "5.1.1", "vary": "1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "1.33.0" - } - } } }, "concat-map": { @@ -1666,20 +1632,43 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "typedarray": "0.0.6" } }, "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.0.6", + "finalhandler": "1.1.0", "parseurl": "1.3.2", "utils-merge": "1.0.1" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } } }, "connect-history-api-fallback": { @@ -1746,9 +1735,9 @@ "dev": true }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", "dev": true }, "core-util-is": { @@ -1776,7 +1765,7 @@ "cipher-base": "1.0.4", "inherits": "2.0.3", "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "create-hmac": { @@ -1790,7 +1779,7 @@ "inherits": "2.0.3", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "create-react-class": { @@ -1802,14 +1791,17 @@ "fbjs": "0.8.16", "loose-envify": "1.3.1", "object-assign": "4.1.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.2", + "shebang-command": "1.2.0", + "which": "1.3.0" } }, "cryptiles": { @@ -1827,7 +1819,7 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } } } @@ -1848,7 +1840,7 @@ "pbkdf2": "3.0.14", "public-encrypt": "4.0.0", "randombytes": "2.0.6", - "randomfill": "1.0.3" + "randomfill": "1.0.4" } }, "css-color-keywords": { @@ -1889,7 +1881,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.41" + "es5-ext": "0.10.42" } }, "dashdash": { @@ -1988,7 +1980,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.3" + "clone": "1.0.4" } }, "define-properties": { @@ -1999,23 +1991,53 @@ "requires": { "foreach": "2.0.5", "object-keys": "1.0.11" - }, - "dependencies": { - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - } } }, "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "defined": { @@ -2031,8 +2053,8 @@ "dev": true, "optional": true, "requires": { - "ast-types": "0.10.1", - "escodegen": "1.9.0", + "ast-types": "0.11.3", + "escodegen": "1.9.1", "esprima": "3.1.3" } }, @@ -2129,16 +2151,8 @@ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", "dev": true, "requires": { - "acorn": "5.3.0", + "acorn": "5.5.3", "defined": "1.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", - "dev": true - } } }, "di": { @@ -2172,14 +2186,6 @@ "requires": { "ip": "1.1.5", "safe-buffer": "5.1.1" - }, - "dependencies": { - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - } } }, "dns-txt": { @@ -2210,9 +2216,9 @@ "dev": true }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "double-ended-queue": { @@ -2306,7 +2312,7 @@ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "0.4.21" } }, "end-of-stream": { @@ -2329,6 +2335,75 @@ } } }, + "engine.io": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", + "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", + "dev": true, + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "uws": "9.14.0", + "ws": "3.3.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", @@ -2339,14 +2414,6 @@ "memory-fs": "0.4.1", "object-assign": "4.1.1", "tapable": "0.2.8" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } } }, "ent": { @@ -2371,14 +2438,6 @@ "dev": true, "requires": { "is-arrayish": "0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - } } }, "es-abstract": { @@ -2406,9 +2465,9 @@ } }, "es5-ext": { - "version": "0.10.41", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", - "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "dev": true, "requires": { "es6-iterator": "2.0.3", @@ -2423,7 +2482,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-symbol": "3.1.1" } }, @@ -2434,7 +2493,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-set": "0.1.5", "es6-symbol": "3.1.1", @@ -2442,9 +2501,9 @@ } }, "es6-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.2.tgz", - "integrity": "sha512-LSas5vsuA6Q4nEdf9wokY5/AJYXry98i0IzXsv49rYsgDGDNDPbqAYR1Pe23iFxygfbGZNR/5VrHXBCh2BhvUQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", "dev": true }, "es6-promisify": { @@ -2453,7 +2512,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "4.2.2" + "es6-promise": "4.2.4" } }, "es6-set": { @@ -2463,7 +2522,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", "event-emitter": "0.3.5" @@ -2476,7 +2535,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41" + "es5-ext": "0.10.42" } }, "es6-weak-map": { @@ -2486,7 +2545,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -2504,9 +2563,9 @@ "dev": true }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, "optional": true, "requires": { @@ -2514,7 +2573,16 @@ "estraverse": "4.2.0", "esutils": "2.0.2", "optionator": "0.8.2", - "source-map": "0.5.7" + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } } }, "escope": { @@ -2570,7 +2638,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.41" + "es5-ext": "0.10.42" } }, "eventemitter3": { @@ -2617,19 +2685,6 @@ "p-finally": "1.0.0", "signal-exit": "3.0.2", "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - } } }, "exenv": { @@ -2710,9 +2765,9 @@ "define-property": "0.2.5", "extend-shallow": "2.0.1", "posix-character-classes": "0.1.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2724,62 +2779,14 @@ "is-descriptor": "0.1.6" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "is-extendable": "0.1.1" } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -2822,15 +2829,6 @@ "requires": { "isarray": "1.0.0" } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } } } }, @@ -2881,67 +2879,11 @@ "vary": "1.1.2" }, "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - } - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "1.33.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" - } } } }, @@ -2952,12 +2894,24 @@ "dev": true }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } } }, "extglob": { @@ -2971,9 +2925,64 @@ "expand-brackets": "2.1.4", "extend-shallow": "2.0.1", "fragment-cache": "0.2.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "extract-zip": { @@ -3020,12 +3029,20 @@ "ansi-gray": "0.1.1", "color-support": "1.1.3", "time-stamp": "1.1.0" + }, + "dependencies": { + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + } } }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-json-stable-stringify": { @@ -3063,20 +3080,6 @@ "promise": "7.3.1", "setimmediate": "1.0.5", "ua-parser-js": "0.7.17" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } } }, "fd-slicer": { @@ -3117,12 +3120,23 @@ "is-number": "3.0.0", "repeat-string": "1.6.1", "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { "debug": "2.6.9", @@ -3130,22 +3144,14 @@ "escape-html": "1.0.3", "on-finished": "2.3.0", "parseurl": "1.3.2", - "statuses": "1.3.1", + "statuses": "1.4.0", "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } } }, "find": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/find/-/find-0.2.8.tgz", - "integrity": "sha512-7Z96U7PMb7ijrinFZka5N5DWtgziLKdO8EFJSK3AiPqiUkJRcGNofV0/N/Pbe6myimrn7JCpqn+Pvb+Xz9q0NQ==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz", + "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=", "dev": true, "requires": { "traverse-chain": "0.1.0" @@ -3174,8 +3180,19 @@ "requires": { "detect-file": "1.0.0", "is-glob": "3.1.0", - "micromatch": "3.1.5", + "micromatch": "3.1.10", "resolve-dir": "1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } } }, "fined": { @@ -3229,9 +3246,9 @@ "dev": true }, "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { "for-in": "1.0.2" @@ -3250,14 +3267,14 @@ "dev": true }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "formatio": { @@ -3325,7 +3342,7 @@ "dev": true, "optional": true, "requires": { - "nan": "2.8.0", + "nan": "2.10.0", "node-pre-gyp": "0.6.39" }, "dependencies": { @@ -4296,11 +4313,16 @@ "wide-align": "1.1.2" }, "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -4367,7 +4389,7 @@ "extend": "3.0.1", "file-uri-to-path": "1.0.0", "ftp": "0.3.10", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "get-value": { @@ -4409,6 +4431,15 @@ "is-glob": "2.0.1" }, "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", @@ -4427,27 +4458,22 @@ } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "2.1.1" } } } @@ -4490,7 +4516,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "readable-stream": { @@ -4558,7 +4584,7 @@ "dev": true, "requires": { "global-prefix": "1.0.2", - "is-windows": "1.0.1", + "is-windows": "1.0.2", "resolve-dir": "1.0.1" } }, @@ -4571,7 +4597,7 @@ "expand-tilde": "2.0.2", "homedir-polyfill": "1.0.1", "ini": "1.3.5", - "is-windows": "1.0.1", + "is-windows": "1.0.2", "which": "1.3.0" } }, @@ -4588,12 +4614,6 @@ "pinkie-promise": "2.0.1" }, "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -4661,9 +4681,9 @@ } }, "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { "sparkles": "1.0.0" @@ -4746,9 +4766,9 @@ "dev": true }, "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-stats": { @@ -4797,10 +4817,10 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", + "cloneable-readable": "1.1.2", "remove-trailing-separator": "1.1.0", "replace-ext": "1.0.0" } @@ -4824,9 +4844,9 @@ }, "dependencies": { "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-stats": { @@ -4841,6 +4861,12 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -4881,10 +4907,10 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", + "cloneable-readable": "1.1.2", "remove-trailing-separator": "1.1.0", "replace-ext": "1.0.0" } @@ -4906,7 +4932,7 @@ "integrity": "sha512-qEocs1UVoDKKUjfsxJNMNwkRla0PbsyJwsqNNXpzYWsLQ29LhxRMY3wnTGZcc4hMHtalnvah/Dwlwb4NijH/0A==", "dev": true, "requires": { - "ansi-colors": "1.0.1", + "ansi-colors": "1.1.0", "fancy-log": "1.3.2", "lodash.template": "4.4.0", "node-notifier": "5.2.1", @@ -4999,19 +5025,19 @@ "dev": true, "requires": { "istextorbinary": "1.0.2", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "replacestream": "4.0.3" } }, "gulp-sass": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz", - "integrity": "sha1-U9xLaKH13f5EJKtMJHZVJpqLdLc=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.2.1.tgz", + "integrity": "sha512-UATbRpSDsyXCnpYSPBUEvdvtSEzksJs7/oQ0CujIpzKqKrO6vlnYwhX2UTsGrf4rNLwqlSSaM271It0uHYvJ3Q==", "dev": true, "requires": { "gulp-util": "3.0.8", "lodash.clonedeep": "4.5.0", - "node-sass": "4.7.2", + "node-sass": "4.8.3", "through2": "2.0.3", "vinyl-sourcemaps-apply": "0.2.1" } @@ -5051,7 +5077,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "readable-stream": { @@ -5090,7 +5116,7 @@ "integrity": "sha512-c+p+EcyBl1UCpbfFA/vUD6MuC7uxoY6Y4g2lq9lLtzOHh9o1wijAQ4o0TIRQ14C7cG6zR6Zi+bpA0cW78CFt6g==", "dev": true, "requires": { - "thunks": "4.9.0" + "thunks": "4.9.2" } }, "gulp-strip-css-comments": { @@ -5187,6 +5213,12 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true } } }, @@ -5196,7 +5228,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.0" + "glogg": "1.0.1" } }, "handle-thing": { @@ -5352,7 +5384,7 @@ "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", - "hoek": "4.2.0", + "hoek": "4.2.1", "sntp": "2.1.0" } }, @@ -5363,8 +5395,8 @@ "dev": true, "optional": true, "requires": { - "lodash": "4.17.4", - "request": "2.83.0" + "lodash": "4.17.5", + "request": "2.85.0" } }, "hmac-drbg": { @@ -5379,9 +5411,9 @@ } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "dev": true }, "hoist-non-react-statics": { @@ -5400,9 +5432,9 @@ } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "hpack.js": { @@ -5413,7 +5445,7 @@ "requires": { "inherits": "2.0.3", "obuf": "1.1.2", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "wbuf": "1.7.3" } }, @@ -5436,23 +5468,15 @@ "dev": true }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", + "setprototypeof": "1.1.0", "statuses": "1.4.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - } } }, "http-parser-js": { @@ -5480,6 +5504,24 @@ "agent-base": "2.1.1", "debug": "2.6.9", "extend": "3.0.1" + }, + "dependencies": { + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + } + }, + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } } }, "http-proxy-middleware": { @@ -5490,7 +5532,7 @@ "requires": { "http-proxy": "1.16.2", "is-glob": "3.1.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "micromatch": "2.3.11" }, "dependencies": { @@ -5536,21 +5578,23 @@ "dev": true, "requires": { "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-extglob": "2.1.1" } }, "micromatch": { @@ -5574,6 +5618,12 @@ "regex-cache": "0.4.4" }, "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -5595,7 +5645,7 @@ "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "httpntlm": { @@ -5621,26 +5671,39 @@ "dev": true }, "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", "dev": true }, "import-local": { @@ -5710,41 +5773,31 @@ } }, "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz", + "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==", "dev": true, "requires": { "JSONStream": "1.3.2", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", + "combine-source-map": "0.8.0", + "concat-stream": "1.6.2", "is-buffer": "1.1.6", "lexical-scope": "1.2.0", + "path-is-absolute": "1.0.1", "process": "0.11.10", "through2": "2.0.3", "xtend": "4.0.1" }, "dependencies": { - "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" - } - }, "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.0.6", + "readable-stream": "2.3.6", "typedarray": "0.0.6" } }, @@ -5753,26 +5806,6 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, @@ -5863,12 +5896,6 @@ "trim-newlines": "1.0.0" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -5983,11 +6010,10 @@ "dev": true }, "ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz", - "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", - "dev": true, - "optional": true + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true }, "ip-regex": { "version": "1.0.3", @@ -6014,18 +6040,24 @@ "dev": true, "requires": { "is-relative": "1.0.0", - "is-windows": "1.0.1" + "is-windows": "1.0.2" } }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "3.2.2" } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -6057,12 +6089,12 @@ "dev": true }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "3.2.2" } }, "is-date-object": { @@ -6072,14 +6104,22 @@ "dev": true }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "is-dotfile": { @@ -6134,22 +6174,29 @@ "dev": true }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { "is-extglob": "2.1.1" } }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, "is-my-json-valid": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz", - "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==", + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { "generate-function": "2.0.0", "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", "jsonpointer": "4.0.1", "xtend": "4.0.1" } @@ -6161,26 +6208,23 @@ "dev": true, "requires": { "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } } }, "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "3.0.0" + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } } }, "is-path-cwd": { @@ -6298,9 +6342,9 @@ "dev": true }, "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "is-wsl": { @@ -6340,7 +6384,7 @@ "dev": true, "requires": { "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" + "whatwg-fetch": "2.0.4" } }, "isstream": { @@ -6360,9 +6404,9 @@ } }, "jasmine-core": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.9.1.tgz", - "integrity": "sha1-trvB2OZSUNVvWIhGFwXr7uuI8i8=", + "version": "2.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", "dev": true }, "jimp": { @@ -6383,7 +6427,7 @@ "pixelmatch": "4.0.2", "pngjs": "3.3.2", "read-chunk": "1.0.1", - "request": "2.83.0", + "request": "2.85.0", "stream-to-buffer": "0.1.0", "tinycolor2": "1.4.1", "url-regex": "3.2.0" @@ -6404,9 +6448,9 @@ "dev": true }, "js-base64": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.2.tgz", - "integrity": "sha512-lLkz3IRPTNeATsKQGeltbzRK/5+bWsXBHfpZrxJAi4N30RtCtNA+rJznp4uR2+4OgkBsoeeFwONVLr4gzIVErQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", "dev": true }, "js-tokens": { @@ -6429,9 +6473,9 @@ "dev": true }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { @@ -6572,10 +6616,10 @@ "body-parser": "1.18.2", "browserify": "14.5.0", "chokidar": "1.7.0", - "colors": "1.1.2", + "colors": "1.2.1", "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.3", + "connect": "3.6.6", + "core-js": "2.5.5", "di": "0.0.1", "dom-serialize": "2.2.1", "expand-braces": "0.1.2", @@ -6583,221 +6627,141 @@ "graceful-fs": "4.1.11", "http-proxy": "1.16.2", "isbinaryfile": "3.0.2", - "lodash": "4.17.4", - "log4js": "2.5.2", + "lodash": "4.17.5", + "log4js": "2.5.3", "mime": "1.6.0", "minimatch": "3.0.4", "optimist": "0.6.1", - "qjobs": "1.1.5", + "qjobs": "1.2.0", "range-parser": "1.2.0", "rimraf": "2.6.2", "safe-buffer": "5.1.1", "socket.io": "2.0.4", "source-map": "0.6.1", "tmp": "0.0.33", - "useragent": "2.2.1" + "useragent": "2.3.0" }, "dependencies": { - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "ms": "2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, - "engine.io": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz", - "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=", + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.6.9", - "engine.io-parser": "2.1.2", - "uws": "0.14.5", - "ws": "3.3.3" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "arr-flatten": "1.1.0" } }, - "engine.io-client": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", - "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.6.9", - "engine.io-parser": "2.1.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" } }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "1.0.2" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", "dev": true }, - "log4js": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.2.tgz", - "integrity": "sha512-MmZhzQCfCV5+nQgOqy34V9EV3k+Z/rPCdxyq+25EePKpwdUQxCb19BTmL5iX3iOCSAV/tWh7KVYqchwrx3+S2Q==", + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "amqplib": "0.5.2", - "axios": "0.15.3", - "circular-json": "0.5.1", - "date-format": "1.2.0", - "debug": "3.1.0", - "hipchat-notifier": "1.1.0", - "loggly": "1.1.1", - "mailgun-js": "0.7.15", - "nodemailer": "2.7.2", - "redis": "2.8.0", - "semver": "5.5.0", - "slack-node": "0.2.0", - "streamroller": "0.7.0" + "is-posix-bracket": "0.1.1" } }, - "socket.io": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", - "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "debug": "2.6.9", - "engine.io": "3.1.4", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.0.4", - "socket.io-parser": "3.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "is-extglob": "1.0.0" } }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.6.9", - "engine.io-client": "3.1.4", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.1.2", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "is-extglob": "1.0.0" } }, - "socket.io-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", - "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "2.6.9", - "has-binary2": "1.0.2", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } }, "source-map": { @@ -6805,23 +6769,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" - } - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true } } }, @@ -6884,10 +6831,13 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } }, "klaw": { "version": "1.3.1", @@ -6899,32 +6849,29 @@ } }, "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", "dev": true, "requires": { "inherits": "2.0.3", - "isarray": "0.0.1", + "isarray": "2.0.4", "stream-splicer": "2.0.0" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", "dev": true } } }, "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true }, "lcid": { "version": "1.0.0", @@ -6999,7 +6946,7 @@ "is-plain-object": "2.0.4", "object.map": "1.0.1", "rechoir": "0.6.2", - "resolve": "1.5.0" + "resolve": "1.7.0" } }, "lighthouse-logger": { @@ -7066,15 +7013,15 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", "dev": true }, "lodash-es": { - "version": "4.17.7", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.7.tgz", - "integrity": "sha512-jzqTi3vk4J5Dxq43cNjB0ekfCjPLHixoY2Sc0WHTo+0r928taLqe/VCt02vY5uQBvg0rdXgL3xWkK4X0MCmZcw==", + "version": "4.17.8", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.8.tgz", + "integrity": "sha512-I9mjAxengFAleSThFhhAhvba6fsO0hunb9/0sQ6qQihSZsJRBofv2rYH58WXaOb/O++eUmYpCLywSQ22GfU+sA==", "dev": true }, "lodash._basecopy": { @@ -7182,9 +7129,9 @@ "dev": true }, "lodash.mergewith": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", - "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", "dev": true }, "lodash.restparam": { @@ -7220,6 +7167,38 @@ "lodash.escape": "3.2.0" } }, + "log4js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.3.tgz", + "integrity": "sha512-YL/qpTxYtK0iWWbuKCrevDZz5lh+OjyHHD+mICqpjnYGKdNRBvPeh/1uYjkKUemT1CSO4wwLOwphWMpKAnD9kw==", + "dev": true, + "requires": { + "amqplib": "0.5.2", + "axios": "0.15.3", + "circular-json": "0.5.1", + "date-format": "1.2.0", + "debug": "3.1.0", + "hipchat-notifier": "1.1.0", + "loggly": "1.1.1", + "mailgun-js": "0.7.15", + "nodemailer": "2.7.2", + "redis": "2.8.0", + "semver": "5.5.0", + "slack-node": "0.2.0", + "streamroller": "0.7.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, "loggly": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", @@ -7262,13 +7241,6 @@ "dev": true, "optional": true }, - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true, - "optional": true - }, "cryptiles": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", @@ -7287,8 +7259,8 @@ "optional": true, "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "har-validator": { @@ -7299,8 +7271,8 @@ "optional": true, "requires": { "chalk": "1.1.3", - "commander": "2.13.0", - "is-my-json-valid": "2.17.1", + "commander": "2.11.0", + "is-my-json-valid": "2.17.2", "pinkie-promise": "2.0.1" } }, @@ -7332,9 +7304,16 @@ "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true, + "optional": true + }, "qs": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", @@ -7350,10 +7329,10 @@ "optional": true, "requires": { "aws-sign2": "0.6.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "bl": "1.1.2", "caseless": "0.11.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", "form-data": "2.0.0", @@ -7363,12 +7342,12 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "node-uuid": "1.4.8", "oauth-sign": "0.8.2", "qs": "6.2.3", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3" } }, @@ -7429,21 +7408,13 @@ } }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } } }, "mailcomposer": { @@ -7475,6 +7446,16 @@ "tsscmp": "1.0.5" }, "dependencies": { + "async": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz", + "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", + "dev": true, + "optional": true, + "requires": { + "lodash": "4.17.5" + } + }, "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", @@ -7493,8 +7474,8 @@ "optional": true, "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "ms": { @@ -7507,22 +7488,19 @@ } }, "make-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz", - "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "6.0.2" }, "dependencies": { "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -7581,7 +7559,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "memory-fs": { @@ -7591,7 +7569,7 @@ "dev": true, "requires": { "errno": "0.1.7", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "meow": { @@ -7630,24 +7608,32 @@ "dev": true }, "micromatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", - "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", - "braces": "2.3.0", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", "extglob": "2.0.4", "fragment-cache": "0.2.1", "kind-of": "6.0.2", - "nanomatch": "1.2.7", + "nanomatch": "1.2.9", "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "miller-rabin": { @@ -7667,24 +7653,24 @@ "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "min-document": { @@ -7714,7 +7700,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -7734,9 +7720,9 @@ } }, "mixin-deep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", - "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { "for-in": "1.0.2", @@ -7786,8 +7772,8 @@ "duplexer2": "0.1.4", "inherits": "2.0.3", "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.5.0", + "readable-stream": "2.3.6", + "resolve": "1.7.0", "stream-combiner2": "1.1.1", "subarg": "1.0.0", "through2": "2.0.3", @@ -7827,9 +7813,15 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -7870,42 +7862,43 @@ } }, "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", "dev": true }, "nanomatch": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", - "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { "arr-diff": "4.0.0", "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", "fragment-cache": "0.2.1", - "is-odd": "1.0.0", - "kind-of": "5.1.0", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } }, "natives": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz", - "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz", + "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==", "dev": true }, "negotiator": { @@ -7962,8 +7955,8 @@ "mkdirp": "0.5.1", "nopt": "3.0.6", "npmlog": "4.1.2", - "osenv": "0.1.4", - "request": "2.83.0", + "osenv": "0.1.5", + "request": "2.85.0", "rimraf": "2.6.2", "semver": "5.3.0", "tar": "2.2.1", @@ -7975,17 +7968,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } } } }, @@ -8001,7 +7983,7 @@ "console-browserify": "1.1.0", "constants-browserify": "1.0.0", "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", + "domain-browser": "1.2.0", "events": "1.1.1", "https-browserify": "1.0.0", "os-browserify": "0.3.0", @@ -8009,10 +7991,10 @@ "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", + "stream-http": "2.8.1", + "string_decoder": "1.1.1", "timers-browserify": "2.0.6", "tty-browserify": "0.0.0", "url": "0.11.0", @@ -8026,8 +8008,8 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", + "base64-js": "1.2.3", + "ieee754": "1.1.11", "isarray": "1.0.0" } }, @@ -8036,15 +8018,6 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true - }, - "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } } } }, @@ -8079,9 +8052,9 @@ } }, "node-sass": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.8.3.tgz", + "integrity": "sha512-tfFWhUsCk/Y19zarDcPo5xpj+IW3qCfOjVdHtYeG6S1CKbQOh1zqylnQK6cV3z9k80yxAnFX9Y+a9+XysDhhfg==", "dev": true, "requires": { "async-foreach": "0.1.3", @@ -8093,10 +8066,10 @@ "in-publish": "2.0.0", "lodash.assign": "4.2.0", "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.0", + "lodash.mergewith": "4.6.1", "meow": "3.7.0", "mkdirp": "0.5.1", - "nan": "2.8.0", + "nan": "2.10.0", "node-gyp": "3.6.2", "npmlog": "4.1.2", "request": "2.79.0", @@ -8148,19 +8121,13 @@ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", "dev": true }, - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "which": "1.3.0" } }, @@ -8190,8 +8157,8 @@ "dev": true, "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "gaze": { @@ -8216,7 +8183,7 @@ "dev": true, "requires": { "glob": "7.1.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4" } }, @@ -8227,8 +8194,8 @@ "dev": true, "requires": { "chalk": "1.1.3", - "commander": "2.13.0", - "is-my-json-valid": "2.17.1", + "commander": "2.11.0", + "is-my-json-valid": "2.17.2", "pinkie-promise": "2.0.1" } }, @@ -8258,7 +8225,7 @@ "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", - "sshpk": "1.13.1" + "sshpk": "1.14.1" } }, "indent-string": { @@ -8307,12 +8274,6 @@ "trim-newlines": "1.0.0" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -8392,9 +8353,9 @@ "dev": true, "requires": { "aws-sign2": "0.6.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.11.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", "form-data": "2.1.4", @@ -8404,11 +8365,11 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "qs": "6.3.2", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.4.3", "uuid": "3.2.1" } @@ -8454,12 +8415,11 @@ } } }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true, - "optional": true + "node-version": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz", + "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==", + "dev": true }, "node.extend": { "version": "2.0.0", @@ -8486,13 +8446,6 @@ "socks": "1.1.9" }, "dependencies": { - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true, - "optional": true - }, "socks": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", @@ -8577,10 +8530,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", "semver": "5.5.0", - "validate-npm-package-license": "3.0.1" + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -8632,9 +8585,9 @@ "dev": true }, "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-component": { @@ -8662,52 +8615,6 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } } } }, @@ -8718,9 +8625,9 @@ "dev": true }, "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", "dev": true }, "object-visit": { @@ -8742,6 +8649,17 @@ "array-slice": "1.1.0", "for-own": "1.0.0", "isobject": "3.0.1" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } } }, "object.map": { @@ -8751,7 +8669,18 @@ "dev": true, "requires": { "for-own": "1.0.0", - "make-iterator": "1.0.0" + "make-iterator": "1.0.1" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } } }, "object.omit": { @@ -8762,17 +8691,6 @@ "requires": { "for-own": "0.1.5", "is-extendable": "0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - } } }, "object.pick": { @@ -8836,7 +8754,7 @@ "dev": true, "requires": { "minimist": "0.0.10", - "wordwrap": "0.0.3" + "wordwrap": "0.0.2" }, "dependencies": { "minimist": { @@ -8879,7 +8797,7 @@ "requires": { "end-of-stream": "0.1.5", "sequencify": "0.0.7", - "stream-consume": "0.1.0" + "stream-consume": "0.1.1" } }, "ordered-read-streams": { @@ -8928,12 +8846,14 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "lcid": "1.0.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "os-tmpdir": { @@ -8943,9 +8863,9 @@ "dev": true }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { "os-homedir": "1.0.2", @@ -9004,6 +8924,36 @@ "pac-resolver": "2.0.0", "raw-body": "2.3.2", "socks-proxy-agent": "2.1.1" + }, + "dependencies": { + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + } + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } } }, "pac-resolver": { @@ -9026,6 +8976,13 @@ "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=", "dev": true, "optional": true + }, + "ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz", + "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", + "dev": true, + "optional": true } } }, @@ -9050,8 +9007,8 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", "pbkdf2": "3.0.14" @@ -9136,7 +9093,7 @@ "dev": true, "requires": { "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "json-parse-better-errors": "1.0.2" } }, "parse-passwd": { @@ -9300,7 +9257,7 @@ "create-hmac": "1.1.6", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "pend": { @@ -9321,13 +9278,13 @@ "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "dev": true, "requires": { - "es6-promise": "4.2.2", + "es6-promise": "4.2.4", "extract-zip": "1.6.6", "fs-extra": "1.0.0", "hasha": "2.2.0", "kew": "0.7.0", "progress": "1.1.8", - "request": "2.83.0", + "request": "2.85.0", "request-progress": "2.0.1", "which": "1.3.0" }, @@ -9385,36 +9342,15 @@ } }, "plugin-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.0.tgz", - "integrity": "sha1-N9Zr2W6jNLdHJYTbFJZ3uiM3ck4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "requires": { - "ansi-colors": "1.0.1", + "ansi-colors": "1.1.0", "arr-diff": "4.0.0", "arr-union": "3.1.0", "extend-shallow": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } } }, "pngjs": { @@ -9479,9 +9415,9 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "progress": { @@ -9499,6 +9435,12 @@ "asap": "2.0.6" } }, + "promise-polyfill": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", + "integrity": "sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc=", + "dev": true + }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", @@ -9508,14 +9450,6 @@ "fbjs": "0.8.16", "loose-envify": "1.3.1", "object-assign": "4.1.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } } }, "proxy-addr": { @@ -9545,16 +9479,44 @@ "socks-proxy-agent": "2.1.1" }, "dependencies": { - "lru-cache": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz", - "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=", + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "dev": true, - "optional": true - } - } - }, - "proxy-from-env": { + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + } + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "lru-cache": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz", + "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", @@ -9599,7 +9561,7 @@ "requires": { "debug": "2.6.9", "extract-zip": "1.6.6", - "https-proxy-agent": "2.2.0", + "https-proxy-agent": "2.2.1", "mime": "1.6.0", "progress": "2.0.0", "proxy-from-env": "1.0.0", @@ -9607,36 +9569,6 @@ "ws": "3.3.3" }, "dependencies": { - "agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", - "dev": true, - "requires": { - "es6-promisify": "5.0.0" - } - }, - "https-proxy-agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.0.tgz", - "integrity": "sha512-uUWcfXHvy/dwfM9bqa6AozvAjS32dZSTUYd/4SEpYKRg6LEcPLshksnQYRudM9AyNvUARMfAg5TLjUDyX/K4vA==", - "dev": true, - "requires": { - "agent-base": "4.2.0", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "progress": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", @@ -9653,9 +9585,9 @@ "optional": true }, "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { @@ -9728,9 +9660,9 @@ } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { "randombytes": "2.0.6", @@ -9753,6 +9685,38 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } } }, "react": { @@ -9766,14 +9730,6 @@ "loose-envify": "1.3.1", "object-assign": "4.1.1", "prop-types": "15.6.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } } }, "react-dom": { @@ -9786,14 +9742,6 @@ "loose-envify": "1.3.1", "object-assign": "4.1.1", "prop-types": "15.6.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } } }, "react-modal": { @@ -9835,23 +9783,15 @@ "hoist-non-react-statics": "2.5.0", "invariant": "2.2.4", "lodash": "4.17.5", - "lodash-es": "4.17.7", + "lodash-es": "4.17.8", "loose-envify": "1.3.1", "prop-types": "15.6.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - } } }, "react-sticky": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/react-sticky/-/react-sticky-6.0.1.tgz", - "integrity": "sha1-NWmIvcxvyM0tiXRtIwLtzmfYZoc=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-sticky/-/react-sticky-6.0.2.tgz", + "integrity": "sha512-eXsij6ifE2k1d6eCwQzil0JRS3VLP6BYfiF7qEbVPL3GLqciedGJfbavpXx5T95x5HvhuAA4FChYEDv83r1NyQ==", "dev": true, "requires": { "prop-types": "15.6.1", @@ -9880,7 +9820,7 @@ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "read-pkg": { @@ -9905,17 +9845,17 @@ } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", + "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", + "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } }, @@ -9927,7 +9867,7 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "set-immediate-shim": "1.0.1" } }, @@ -9937,7 +9877,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "1.7.0" } }, "redent": { @@ -9958,14 +9898,14 @@ "optional": true, "requires": { "double-ended-queue": "2.1.0-0", - "redis-commands": "1.3.1", + "redis-commands": "1.3.5", "redis-parser": "2.6.0" } }, "redis-commands": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.1.tgz", - "integrity": "sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", "dev": true, "optional": true }, @@ -9982,8 +9922,8 @@ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", "dev": true, "requires": { - "lodash": "4.17.4", - "lodash-es": "4.17.7", + "lodash": "4.17.5", + "lodash-es": "4.17.8", "loose-envify": "1.3.1", "symbol-observable": "1.2.0" } @@ -10004,12 +9944,13 @@ } }, "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "remove-trailing-separator": { @@ -10053,43 +9994,35 @@ "requires": { "escape-string-regexp": "1.0.5", "object-assign": "4.1.1", - "readable-stream": "2.3.3" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } + "readable-stream": "2.3.6" } }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" } @@ -10111,8 +10044,8 @@ "optional": true, "requires": { "extend": "3.0.1", - "lodash": "4.17.4", - "request": "2.83.0", + "lodash": "4.17.5", + "request": "2.85.0", "when": "3.7.8" } }, @@ -10141,9 +10074,9 @@ "dev": true }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz", + "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==", "dev": true, "requires": { "path-parse": "1.0.5" @@ -10180,6 +10113,12 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -10214,6 +10153,21 @@ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "samsam": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", @@ -10227,7 +10181,7 @@ "dev": true, "requires": { "glob": "7.1.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "scss-tokenizer": "0.2.3", "yargs": "7.1.0" }, @@ -10238,6 +10192,17 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -10261,6 +10226,15 @@ "strip-bom": "2.0.0" } }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -10317,6 +10291,17 @@ "read-pkg": "1.1.0" } }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -10326,6 +10311,12 @@ "is-utf8": "0.2.1" } }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, "yargs": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", @@ -10346,6 +10337,15 @@ "y18n": "3.2.1", "yargs-parser": "5.0.0" } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } } } }, @@ -10361,7 +10361,7 @@ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, "requires": { - "js-base64": "2.4.2", + "js-base64": "2.4.3", "source-map": "0.4.4" }, "dependencies": { @@ -10410,7 +10410,7 @@ "escape-html": "1.0.3", "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", "on-finished": "2.3.0", @@ -10442,38 +10442,9 @@ "batch": "0.6.1", "debug": "2.6.9", "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", + "http-errors": "1.6.3", + "mime-types": "2.1.18", "parseurl": "1.3.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - }, - "dependencies": { - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "1.33.0" - } - } - } - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - } } }, "serve-static": { @@ -10494,15 +10465,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "dev": true, - "requires": { - "to-object-path": "0.3.0" - } - }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -10519,6 +10481,17 @@ "is-extendable": "0.1.1", "is-plain-object": "2.0.4", "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "setimmediate": { @@ -10528,15 +10501,15 @@ "dev": true }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { "inherits": "2.0.3", @@ -10550,7 +10523,7 @@ "dev": true, "requires": { "json-stable-stringify": "0.0.1", - "sha.js": "2.4.10" + "sha.js": "2.4.11" } }, "shebang-command": { @@ -10637,9 +10610,9 @@ } }, "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { "base": "0.11.2", @@ -10649,7 +10622,7 @@ "map-cache": "0.2.2", "source-map": "0.5.7", "source-map-resolve": "0.5.1", - "use": "2.0.2" + "use": "3.1.0" }, "dependencies": { "define-property": { @@ -10661,76 +10634,74 @@ "is-descriptor": "0.1.6" } }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "6.0.2" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "kind-of": "6.0.2" } }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - } - }, "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", @@ -10738,17 +10709,6 @@ "dev": true, "requires": { "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } } }, "sntp": { @@ -10757,23 +10717,92 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.2.1" + "debug": "2.6.9", + "engine.io": "3.1.5", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.3" } }, - "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.9", + "engine.io-client": "3.1.6", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.1.3", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "has-binary2": "1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.2.1" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", "dev": true, "requires": { "debug": "2.6.9", @@ -10781,7 +10810,7 @@ "faye-websocket": "0.11.1", "inherits": "2.0.3", "json3": "3.3.2", - "url-parse": "1.2.0" + "url-parse": "1.3.0" }, "dependencies": { "faye-websocket": { @@ -10803,14 +10832,6 @@ "requires": { "ip": "1.1.5", "smart-buffer": "1.1.15" - }, - "dependencies": { - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - } } }, "socks-proxy-agent": { @@ -10822,6 +10843,24 @@ "agent-base": "2.1.1", "extend": "3.0.1", "socks": "1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + } + }, + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } } }, "source-list-map": { @@ -10842,7 +10881,7 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "2.0.3", + "atob": "2.1.0", "decode-uri-component": "0.2.0", "resolve-url": "0.2.1", "source-map-url": "0.4.0", @@ -10862,24 +10901,35 @@ "dev": true }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "spdy": { @@ -10906,7 +10956,7 @@ "detect-node": "2.0.3", "hpack.js": "2.1.6", "obuf": "1.1.2", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "safe-buffer": "5.1.1", "wbuf": "1.7.3" } @@ -10918,33 +10968,12 @@ "dev": true, "requires": { "extend-shallow": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } } }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { "asn1": "0.2.3", @@ -10975,63 +11004,6 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -11047,7 +11019,7 @@ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "stream-browserify": { @@ -11057,7 +11029,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "stream-combiner2": { @@ -11067,7 +11039,7 @@ "dev": true, "requires": { "duplexer2": "0.1.4", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" }, "dependencies": { "duplexer2": { @@ -11076,26 +11048,26 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } } } }, "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", + "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", "dev": true }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "dev": true, "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" } @@ -11107,7 +11079,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" } }, "stream-to": { @@ -11134,7 +11106,7 @@ "date-format": "1.2.0", "debug": "3.1.0", "mkdirp": "0.5.1", - "readable-stream": "2.3.3" + "readable-stream": "2.3.6" }, "dependencies": { "debug": { @@ -11149,20 +11121,42 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "5.1.1" @@ -11216,7 +11210,7 @@ "integrity": "sha512-bLW0/lQxTgJ0y+TEllctly+/B0Hz2N82e5AhubP+FIVPSisyOzyFnZzWdqRml7RDwRCsT+EGNN8YYa0VFutT+w==", "dev": true, "requires": { - "buffer": "5.0.8", + "buffer": "5.1.0", "css-to-react-native": "2.1.2", "fbjs": "0.8.16", "hoist-non-react-statics": "1.2.0", @@ -11271,12 +11265,12 @@ "dev": true }, "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn-node": "1.3.0" } }, "tapable": { @@ -11285,6 +11279,17 @@ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", "dev": true }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, "temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -11327,7 +11332,7 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", + "readable-stream": "2.3.6", "xtend": "4.0.1" } }, @@ -11339,9 +11344,9 @@ "optional": true }, "thunks": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/thunks/-/thunks-4.9.0.tgz", - "integrity": "sha512-Bp4sGtcf8/SAgX2XBXYH2Crc7ESL7xuTuQ5kx84Tvz7VSkLFg6bfjFBpRmX2DLAWaLeK6q32ogqAnXcr5NAQtw==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/thunks/-/thunks-4.9.2.tgz", + "integrity": "sha1-qsLTU4ElEhYKRhHjAI16luN1b44=", "dev": true }, "thunky": { @@ -11360,26 +11365,18 @@ } }, "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", "dev": true }, "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", + "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", "dev": true, "requires": { - "process": "0.11.10" - }, - "dependencies": { - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - } + "setimmediate": "1.0.5" } }, "timespan": { @@ -11423,96 +11420,18 @@ "dev": true, "requires": { "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } } }, "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -11526,9 +11445,9 @@ } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { "punycode": "1.4.1" @@ -11615,13 +11534,13 @@ } }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" + "mime-types": "2.1.18" } }, "typedarray": { @@ -11653,23 +11572,6 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -11709,9 +11611,9 @@ "dev": true }, "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unc-path-regex": { @@ -11738,6 +11640,15 @@ "set-value": "0.4.3" }, "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", @@ -11810,6 +11721,23 @@ "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", "dev": true }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -11835,9 +11763,9 @@ } }, "url-parse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.3.0.tgz", + "integrity": "sha512-zPvPA3T7P6M+0iNsgX+iAcAz4GshKrowtQBHHc/28tVsBc8jK7VRCNX+2GEcoE6zDB6XqXhcyiUWPVZY6C70Cg==", "dev": true, "requires": { "querystringify": "1.0.0", @@ -11857,85 +11785,23 @@ "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", "dev": true, - "requires": { - "ip-regex": "1.0.3" - } - }, - "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, + "requires": { + "ip-regex": "1.0.3" + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } @@ -11947,21 +11813,13 @@ "dev": true }, "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, "requires": { - "lru-cache": "2.2.4", + "lru-cache": "4.1.2", "tmp": "0.0.33" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } } }, "util": { @@ -12000,9 +11858,9 @@ "dev": true }, "uws": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz", - "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", + "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", "dev": true, "optional": true }, @@ -12016,13 +11874,13 @@ } }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "vary": { @@ -12048,7 +11906,7 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "clone-stats": "0.0.1", "replace-ext": "0.0.1" } @@ -12081,7 +11939,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.1" + "natives": "1.1.3" } }, "isarray": { @@ -12182,68 +12040,6 @@ "chokidar": "2.0.3", "graceful-fs": "4.1.11", "neo-async": "2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "3.1.5", - "normalize-path": "2.1.1" - } - }, - "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.0", - "fsevents": "1.1.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.4" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } } }, "wbuf": { @@ -12263,9 +12059,9 @@ "requires": { "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", - "ajv": "6.3.0", + "ajv": "6.4.0", "ajv-keywords": "3.1.0", - "async": "2.1.5", + "async": "2.6.0", "enhanced-resolve": "3.4.1", "escope": "3.6.0", "interpret": "1.1.0", @@ -12285,28 +12081,41 @@ "yargs": "8.0.2" }, "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, "ajv": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz", - "integrity": "sha1-FlCkERTvAFdMrBC4Ay2PTBSBLac=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" } }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } }, "has-flag": { "version": "2.0.0", @@ -12314,12 +12123,6 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -12332,17 +12135,6 @@ "strip-bom": "3.0.0" } }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -12388,25 +12180,6 @@ "read-pkg": "2.0.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -12416,12 +12189,6 @@ "has-flag": "2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "yargs": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", @@ -12442,15 +12209,6 @@ "y18n": "3.2.1", "yargs-parser": "7.0.0" } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - } } } }, @@ -12465,14 +12223,6 @@ "path-is-absolute": "1.0.1", "range-parser": "1.2.0", "time-stamp": "2.0.0" - }, - "dependencies": { - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true - } } }, "webpack-dev-server": { @@ -12510,40 +12260,21 @@ "yargs": "6.6.0" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "3.1.5", - "normalize-path": "2.1.1" - } - }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true }, - "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.0", - "fsevents": "1.1.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.4" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" } }, "debug": { @@ -12565,48 +12296,12 @@ "pinkie-promise": "2.0.1" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -12620,6 +12315,15 @@ "strip-bom": "2.0.0" } }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -12676,6 +12380,17 @@ "read-pkg": "1.1.0" } }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", @@ -12694,6 +12409,12 @@ "has-flag": "3.0.0" } }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, "yargs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", @@ -12761,9 +12482,9 @@ "dev": true }, "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", "dev": true }, "when": { @@ -12783,9 +12504,9 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wide-align": { @@ -12795,6 +12516,19 @@ "dev": true, "requires": { "string-width": "1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "window-size": { @@ -12804,9 +12538,9 @@ "dev": true }, "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true }, "wrap-ansi": { @@ -12817,6 +12551,19 @@ "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "wrappy": { @@ -12876,6 +12623,12 @@ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, "xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", @@ -12895,10 +12648,16 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, "yargs": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.1.tgz", - "integrity": "sha512-7uRL1HZdCbc1QTP+X8mehOPuCYKC/XTaqAPj7gABLfTt6pgLyVRn3QVte4qhtilZouWCvqd1kipgMKl5tKsFiw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { "cliui": "4.0.0", @@ -12932,33 +12691,6 @@ "wrap-ansi": "2.1.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -12968,12 +12700,6 @@ "ansi-regex": "3.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "yargs-parser": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", @@ -12986,20 +12712,12 @@ } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } + "camelcase": "4.1.0" } }, "yauzl": { From 166ade9648e88192a48439ef8f745e5e08b35c09 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Mon, 9 Apr 2018 18:34:45 +0200 Subject: [PATCH 082/251] PCHR-3221: Improve wait logic of my leave report page --- .../page-objects/ssp-leave-absences-my-leave-report.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js index 9d82774e593..c86c04d2a34 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js @@ -75,7 +75,13 @@ module.exports = page.extend({ */ async openSection (section) { await this.puppet.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); - await this.puppet.waitFor('.spinner', { hidden: true }); + await this.puppet.waitFor(function () { + var spinners = document.querySelectorAll('.spinner'); + + return Array.prototype.every.call(spinners, function (dom) { + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + }); }, /** @@ -114,6 +120,7 @@ module.exports = page.extend({ * Wait for the page to be ready */ async waitForReady () { + await this.puppet.waitFor('.spinner', { visible: false }); await this.puppet.waitFor('td[ng-click="report.toggleSection(\'pending\')"]', { visible: true }); }, From 2b2622cfa118f8ec7939f0faee9eba20d92caf9b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 10 Apr 2018 09:59:11 +0200 Subject: [PATCH 083/251] PCHR-3221: Improve wait logic for L&A import steps --- .../page-objects/leave-absence-import.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js index 00be3b17c5a..38524992f45 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/leave-absence-import.js @@ -14,7 +14,7 @@ module.exports = page.extend({ await fileInput.uploadFile(filePath); await this.puppet.click('[name="skipColumnHeader"]'); - await this.submitAndWait(); + await this.submitAndWaitForStep(2); }, /** @@ -25,7 +25,7 @@ module.exports = page.extend({ */ async showStep3 () { await this.showStep2(); - await this.submitAndWait(); + await this.submitAndWaitForStep(3); }, /** @@ -36,15 +36,18 @@ module.exports = page.extend({ */ async showStep4 () { await this.showStep3(); - await this.submitAndWait(); + await this.submitAndWaitForStep(4); }, /** - * Clicks on next button (.validate) and waits for Step URL. + * Clicks on "next" button and waits for the next step to be ready + * (a step is ready when its breadcrumb in the wizard is active) + * + * @param {Number} step */ - async submitAndWait () { + async submitAndWaitForStep (step) { await this.puppet.click('.crm-leave-and-balance-import .validate'); - await this.puppet.waitForNavigation({ waitUntil: 'domcontentloaded' }); + await this.puppet.waitFor(`.crm_wizard__title .nav-pills li.active:nth-child(${step})`); }, /** From 420f987736e4c884899d5ffd5653dccedcc98447 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 10 Apr 2018 11:44:48 +0200 Subject: [PATCH 084/251] PCHR-3221: Update backstop config --- .../backstop_data/backstop.tpl.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json index a2a0a1b1025..e310450e2cd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/backstop.tpl.json @@ -19,10 +19,9 @@ "engine": "puppet", "engineFlags": [], "engineOptions": { - "waitTimeout": 20000, - "ignoreHTTPSErrors": true + "waitTimeout": 20000 }, - "asyncCaptureLimit": 7, + "asyncCaptureLimit": 1, "asyncCompareLimit": 50, "debug": false, "debugWindow": false From cac44275e2924ce8a94ab574d06c90d2e5240a8e Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 10 Apr 2018 11:52:01 +0200 Subject: [PATCH 085/251] PCHR-3221: Minor syntax fixes --- .../engine_scripts/contact-access-rights/show.js | 1 + .../contact-summary/absence/tab-calendar.js | 1 + .../contact-summary/absence/tab-entitlements.js | 1 + .../contact-summary/absence/tab-report.js | 1 + .../contact-summary/absence/tab-work-patterns.js | 1 + .../contact-summary/job-contract/delete-dialog.js | 1 + .../contact-summary/job-contract/full-history.js | 1 + .../contact-summary/job-roles/add-new.js | 1 + .../contact-summary/job-roles/cost-centres.js | 1 + .../contact-summary/job-roles/delete-dialog.js | 1 + .../contact-summary/job-roles/funding.js | 1 + .../engine_scripts/contact-summary/show-actions.js | 1 + .../engine_scripts/documents/advanced-filters.js | 1 + .../engine_scripts/documents/document/add.js | 1 + .../leave-absence-dashboard/import/step-2.js | 1 + .../leave-absence-dashboard/import/step-3.js | 1 + .../leave-absence-dashboard/import/step-4.js | 1 + .../leave-balances/leave-balances.js | 1 + .../leave-calendar/leave-calendar.js | 1 + .../leave-requests/leave-requests.js | 1 + .../engine_scripts/onboarding-wizard/address.js | 1 + .../engine_scripts/onboarding-wizard/contact.js | 1 + .../engine_scripts/onboarding-wizard/dependents.js | 1 + .../onboarding-wizard/emergency_contact.js | 1 + .../engine_scripts/onboarding-wizard/payroll.js | 1 + .../onboarding-wizard/profile_picture.js | 1 + .../engine_scripts/ssp/edit-my-details.js | 1 + .../engine_scripts/ssp/hr-resources-see-resources.js | 1 + .../ssp/manager-leave/calendar-all-contacts.js | 1 + .../ssp/manager-leave/calendar-legend-expanded.js | 1 + .../leave-requests-as-admin-all-requests.js | 1 + .../ssp/manager-leave/leave-requests-show-actions.js | 1 + .../ssp/manager-leave/leave-requests-with-filters.js | 1 + .../manager-leave/modal-leave-on-behalf-of-staff.js | 1 + .../manager-leave/modal-sick-on-behalf-of-staff.js | 1 + .../manager-leave/modal-toil-on-behalf-of-staff.js | 1 + .../engine_scripts/ssp/my-leave/calendar-tooltip.js | 1 + .../engine_scripts/ssp/my-leave/report.js | 1 + .../engine_scripts/ssp/tasks-create-new-task.js | 1 + .../engine_scripts/ssp/tasks-show-completed-tasks.js | 1 + .../engine_scripts/ssp/vacancies-more-details.js | 1 + .../engine_scripts/tasks/advanced-filters.js | 1 + .../engine_scripts/tasks/assignment/add.js | 1 + .../engine_scripts/tasks/select-dates.js | 1 + .../engine_scripts/tasks/task/actions.js | 1 + .../backstop_data/engine_scripts/tasks/task/add.js | 1 + .../engine_scripts/tasks/task/editable-assigned.js | 1 + .../engine_scripts/tasks/task/editable-date.js | 1 + .../engine_scripts/tasks/task/editable-subject.js | 1 + .../engine_scripts/tasks/task/editable-target.js | 1 + .../backstop_data/engine_scripts/tasks/task/open.js | 1 + .../engine_scripts/tasks/task/show-more.js | 1 + .../work-patterns/show-calendar-form.js | 1 + .../backstop_data/page-objects/page.js | 12 ++++++------ 54 files changed, 59 insertions(+), 6 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js index 626f4c60007..7168b0d387c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-access-rights/show.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/contact-summary'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openManageRightsModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js index 3018a14ce73..6b6d23229d5 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-calendar.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/absence'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openSubTab('calendar'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js index 3117bcf34db..9d9bd0dd527 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-entitlements.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/absence'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openSubTab('entitlements'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js index 71474b75709..5fcf069f8d7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-report.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/absence'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openSubTab('report'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js index 1688c04a07d..dc15cb8da62 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/absence/tab-work-patterns.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/absence'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openSubTab('work-patterns'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js index c62f9f0ccc2..bbbdcc94a90 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/delete-dialog.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/job-contract'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.attemptDelete(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js index 36d51ef7bff..d0c46e0398d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-contract/full-history.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/job-contract'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showFullHistory(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js index 6a511065b5c..c09640caa09 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/add-new.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/job-roles'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showAddNew(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js index 7d079514813..04665bb4623 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/cost-centres.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/job-roles'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.switchToTab('Cost Centres'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js index dd713cb8378..e579eb4756e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/delete-dialog.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/job-roles'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.attemptDelete(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js index f497917bfa4..e72d493112a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/job-roles/funding.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tabs/job-roles'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.switchToTab('Funding'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js index 7eb0091927b..9422920de56 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/contact-summary/show-actions.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/contact-summary'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showActions(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js index 4d6f80240cb..46c38316647 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/advanced-filters.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/documents'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.advancedFilters(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js index 4d5b7955c78..c0350ac3933 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/documents/document/add.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/documents'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.addDocument(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js index e6876ec23e3..b76482a23b9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-2.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/leave-absence-import'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showStep2(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js index 6f5b6a57aa0..8c488344bd4 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-3.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/leave-absence-import'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showStep3(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js index 0ae5c4dacfe..4e5e58e87dd 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/import/step-4.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/leave-absence-import'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showStep4(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js index 87b35db5eb0..2e45045eb08 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-balances/leave-balances.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/leave-absence-dashboard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openTab('leave-balances'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js index b14f107786c..b407d1d5791 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-calendar/leave-calendar.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/leave-absence-dashboard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openTab('leave-calendar'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js index 4e8fd22502f..51ba03a6f90 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/leave-absence-dashboard/leave-requests/leave-requests.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/leave-absence-dashboard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openTab('leave-requests'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js index 926597d5321..552dc90e28a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/address.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/onboarding-wizard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.reachAddressPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js index 06f898d3400..9190e3b97e3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/contact.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/onboarding-wizard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.reachContactInfoPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js index 485b48d9dc1..737605fe363 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/dependents.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/onboarding-wizard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.reachDependentPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js index 6644868825e..5a658d259f7 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/emergency_contact.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/onboarding-wizard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.reachEmergencyContactPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js index 82432f5f2df..52291c4cc4e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/payroll.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/onboarding-wizard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.reachPayrollPage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js index c40d0c2a786..3a2dc579ad4 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/onboarding-wizard/profile_picture.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/onboarding-wizard'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.reachProfilePicturePage(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js index d51c2b5fd32..095501bff53 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/edit-my-details.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/ssp-my-details'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showEditMyDetailsPopup(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js index 8e5cbfdb04b..fb34f9ea031 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/hr-resources-see-resources.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/ssp-hr-resources'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.seeResources(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js index 11272b8df43..029c211d371 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-all-contacts.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- module.exports = async engine => { const page = await pageObj.init(engine); + await page.toggleContactsWithLeaves(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js index ddaa26b509b..3d46e9d393a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/calendar-legend-expanded.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- module.exports = async engine => { const page = await pageObj.init(engine); + await page.toggleLegend(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js index 4ca69d961b2..94c2ed39988 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-as-admin-all-requests.js @@ -6,5 +6,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- // and have at least one leave request *assigned* to the Admin module.exports = async engine => { const page = await pageObj.init(engine); + await page.changeFilterByAssignee('all'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js index 18f4c89b9dd..bf4fd5fbfa4 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-show-actions.js @@ -5,5 +5,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- // precondition: need to have the login of manager and have at least one leave request module.exports = async engine => { const page = await pageObj.init(engine); + await page.openActionsForRow(1); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js index bbf5e84b714..4676c10290b 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/leave-requests-with-filters.js @@ -5,5 +5,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- // precondition: need to have the login of manager and have at least one leave request module.exports = async engine => { const page = await pageObj.init(engine); + await page.expandFilter(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js index d973b936801..3920944cdc1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-leave-on-behalf-of-staff.js @@ -5,5 +5,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- // precondition: need to have the login of manager module.exports = async engine => { const page = await pageObj.init(engine); + await page.applyLeaveForStaff('leave'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js index 8b6656b676b..31e3e4dfbf6 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-sick-on-behalf-of-staff.js @@ -5,5 +5,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- // precondition: need to have the login of manager module.exports = async engine => { const page = await pageObj.init(engine); + await page.applyLeaveForStaff('sickness'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js index e9ff7b60306..9fb152424a2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/manager-leave/modal-toil-on-behalf-of-staff.js @@ -5,5 +5,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-manager-leave- // precondition: need to have the login of manager module.exports = async engine => { const page = await pageObj.init(engine); + await page.applyLeaveForStaff('toil'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js index 48d7709996a..38e67f4d458 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/calendar-tooltip.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-calen module.exports = async engine => { const page = await pageObj.init(engine); + await page.showTooltip(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js index 84d86bcb5bf..597feb4eb3e 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/my-leave/report.js @@ -5,5 +5,6 @@ const pageObj = require('../../../page-objects/ssp-leave-absences-my-leave-repor // precondition: need to have at least one pending leave request module.exports = async engine => { const page = await pageObj.init(engine); + await page.openSection('pending'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js index c713af819ef..3c9112f21ad 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-create-new-task.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/ssp-tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openCreateNewTaskModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js index 9e9544a164f..350da80b615 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/tasks-show-completed-tasks.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/ssp-tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openCompletedTasksModal(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js index 8b48acc8bb0..b5ce799ef65 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/ssp/vacancies-more-details.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/ssp-vacancies'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showMoreDetails(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js index 62d0522aa90..91b6bd5518f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/advanced-filters.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.advancedFilters(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js index ac6db8b184d..742c19b157c 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/assignment/add.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.addAssignment(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js index fa3489e6450..34e055e938a 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/select-dates.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.selectDates(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js index 350705aec05..a596777afd0 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/actions.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.taskActions(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js index 903e8b5f901..8bb6f9257e2 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/add.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.addTask(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js index b170cf7a68f..f0e8d0b76a8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-assigned.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.inPlaceEdit('assigned'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js index 83d06d15d2b..285493d9498 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-date.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.inPlaceEdit('date'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js index d2d70691a98..0025e4be775 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-subject.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.inPlaceEdit('subject'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js index 1ec115d7769..3f2cab22095 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/editable-target.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.inPlaceEdit('target'); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js index 5072e5a0b9d..9b043ab44e8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/open.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.openTask(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js index e927a50493c..a96260b7830 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/tasks/task/show-more.js @@ -4,5 +4,6 @@ const pageObj = require('../../../page-objects/tasks'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showMore(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js index 8e33e01c707..fb4aced4e34 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/engine_scripts/work-patterns/show-calendar-form.js @@ -4,5 +4,6 @@ const pageObj = require('../../page-objects/work-patterns-form'); module.exports = async engine => { const page = await pageObj.init(engine); + await page.showCalendarForm(); }; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js index 7ed977afa32..7688891a978 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/page.js @@ -14,12 +14,12 @@ module.exports = { this.puppet = puppet; !!this.waitForReady && await this.waitForReady(); - let href = await this.puppet.evaluate(() => document.location.href); - let isAdmin = href.indexOf('civicrm/') > 1; + const href = await this.puppet.evaluate(() => document.location.href); + const isAdmin = href.indexOf('civicrm/') > 1; await this.puppet.evaluate(function (isAdmin) { - let selector = isAdmin ? '#content > #console' : '#messages .alert'; - let errorsWrapper = document.querySelector(selector); + const selector = isAdmin ? '#content > #console' : '#messages .alert'; + const errorsWrapper = document.querySelector(selector); errorsWrapper && (errorsWrapper.style.display = 'none'); }, isAdmin); @@ -68,7 +68,7 @@ module.exports = { async function closeAnyModal () { const openModalSelector = '.modal.in'; - let result = await this.puppet.$(openModalSelector); + const result = await this.puppet.$(openModalSelector); if (result) { await this.puppet.click(openModalSelector + ' .close[ng-click="cancel()"]'); @@ -82,7 +82,7 @@ async function closeAnyModal () { async function closeNotifications () { const notificationSelector = 'a.ui-notify-cross.ui-notify-close'; - let result = await this.puppet.$(notificationSelector); + const result = await this.puppet.$(notificationSelector); if (result) { await this.puppet.click(notificationSelector); From bc02f77106e2d335e369910fc923539d5ac30c19 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Tue, 10 Apr 2018 14:13:28 +0200 Subject: [PATCH 086/251] PCHR-3221: Replace var with const --- .../backstop_data/page-objects/contact-summary.js | 1 + .../ssp-leave-absences-manager-leave-balance-report.js | 2 +- .../page-objects/ssp-leave-absences-my-leave-report.js | 2 +- .../backstop_data/page-objects/ssp-reports.js | 4 ++-- .../backstop_data/page-objects/tabs/job-contract.js | 1 + 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index 49f8b9e10d9..f3a8de6dc57 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -22,6 +22,7 @@ module.exports = page.extend({ */ async openTab (tabId) { const tabObj = require('./tabs/' + tabId); + await this.puppet.click('[title="' + tabObj.tabTitle + '"]'); return tabObj.init(this.puppet, false); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js index b58df32320c..06605acd357 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-balance-report.js @@ -7,7 +7,7 @@ module.exports = page.extend({ async waitForReady () { await this.puppet.waitFor('.chr_leave-balance-tab', { visible: true }); await this.puppet.waitFor(function () { - var spinners = document.querySelectorAll('.spinner'); + const spinners = document.querySelectorAll('.spinner'); return Array.prototype.every.call(spinners, function (dom) { return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js index c86c04d2a34..a92e8bafffa 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-report.js @@ -76,7 +76,7 @@ module.exports = page.extend({ async openSection (section) { await this.puppet.click('td[ng-click="report.toggleSection(\'' + section + '\')"]'); await this.puppet.waitFor(function () { - var spinners = document.querySelectorAll('.spinner'); + const spinners = document.querySelectorAll('.spinner'); return Array.prototype.every.call(spinners, function (dom) { return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js index 8e31c8a8c94..c9a262889ac 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-reports.js @@ -1,4 +1,4 @@ -var modal = require('./page'); +const modal = require('./page'); module.exports = modal.extend({ /** @@ -14,7 +14,7 @@ module.exports = modal.extend({ */ async waitForReady () { await this.puppet.evaluate(function () { - var tempStyle = document.createElement('style'); + const tempStyle = document.createElement('style'); tempStyle.type = 'text/css'; tempStyle.innerHTML = '#reportsIframe { height: 1000px !important; }'; diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js index bf778732e61..2d22320ce4d 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/job-contract.js @@ -21,6 +21,7 @@ module.exports = tab.extend({ const param = mode === 'correct' ? 'edit' : (mode === 'revision' ? 'change' : ''); await this.puppet.click('[ng-click="modalContract(\'' + param + '\')"]'); + return this.waitForModal('job-contract'); }, From a8f7aed97421d18699e477a3b026c456d6bcae8f Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 20 Apr 2018 12:01:49 +0200 Subject: [PATCH 087/251] PCHR-3221: Bump BackstopJS version --- .../package-lock.json | 87 ++++++++++--------- uk.co.compucorp.civicrm.hrcore/package.json | 2 +- 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/package-lock.json b/uk.co.compucorp.civicrm.hrcore/package-lock.json index 315ad84d8fb..74ce95b8dfc 100644 --- a/uk.co.compucorp.civicrm.hrcore/package-lock.json +++ b/uk.co.compucorp.civicrm.hrcore/package-lock.json @@ -16,9 +16,9 @@ "dev": true }, "@types/node": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.2.tgz", - "integrity": "sha512-UWkRY9X7RQHp5OhhRIIka58/gVVycL1zHZu0OTsT5LI86ABaMOSbUjAl+b0FeDhQcxclrkyft3kW5QWdMRs8wQ==", + "version": "9.6.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.6.tgz", + "integrity": "sha512-SJe0g5cZeGNDP5sD8mIX3scb+eq8LQQZ60FXiKZHipYSeEFZ5EKml+NNMiO76F74TY4PoMWlNxF/YRY40FOvZQ==", "dev": true }, "@types/rimraf": { @@ -584,9 +584,9 @@ } }, "backstopjs": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-3.2.3.tgz", - "integrity": "sha512-YURuEPLq2InkfTW9BRlXRWMDiluYZn7+vQNUpwTRVnKH66Bk/KCXTDBIbcqTZgJcR8DLoywOQYAOJG9RPBLJmA==", + "version": "3.2.15", + "resolved": "https://registry.npmjs.org/backstopjs/-/backstopjs-3.2.15.tgz", + "integrity": "sha512-VLpW9z8T3AbKsFIh3RcvV4Fuo0zFWTRzOpiincO9zheqlI6tXskZeHwotTc3dsBYbI1YSxMPyn8Ytam7eN07Dg==", "dev": true, "requires": { "backstop-twentytwenty": "1.0.4", @@ -605,10 +605,10 @@ "p-map": "1.2.0", "path": "0.12.7", "phantomjs-prebuilt": "2.1.16", - "puppeteer": "1.2.0", + "puppeteer": "1.3.0", "react": "15.6.2", "react-dom": "15.6.2", - "react-modal": "3.3.2", + "react-modal": "3.4.2", "react-redux": "5.0.7", "react-sticky": "6.0.2", "react-toggle-button": "2.2.0", @@ -1380,7 +1380,7 @@ "requires": { "@types/core-js": "0.9.46", "@types/mkdirp": "0.3.29", - "@types/node": "9.6.2", + "@types/node": "9.6.6", "@types/rimraf": "0.0.28", "is-wsl": "1.1.0", "lighthouse-logger": "1.0.1", @@ -6425,7 +6425,7 @@ "mime": "1.6.0", "mkdirp": "0.5.1", "pixelmatch": "4.0.2", - "pngjs": "3.3.2", + "pngjs": "3.3.3", "read-chunk": "1.0.1", "request": "2.85.0", "stream-to-buffer": "0.1.0", @@ -7908,9 +7908,9 @@ "dev": true }, "neo-async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", - "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", "dev": true }, "netmask": { @@ -7995,7 +7995,7 @@ "stream-browserify": "2.0.1", "stream-http": "2.8.1", "string_decoder": "1.1.1", - "timers-browserify": "2.0.6", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", "url": "0.11.0", "util": "0.10.3", @@ -9329,7 +9329,7 @@ "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", "dev": true, "requires": { - "pngjs": "3.3.2" + "pngjs": "3.3.3" } }, "pkg-dir": { @@ -9354,9 +9354,9 @@ } }, "pngjs": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.2.tgz", - "integrity": "sha512-bVNd3LMXRzdo6s4ehr4XW2wFMu9cb40nPgHEjSSppm8/++Xc+g0b2QQb+SeDesgfANXbjydOr1or9YQ+pcCZPQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.3.tgz", + "integrity": "sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==", "dev": true }, "portfinder": { @@ -9554,9 +9554,9 @@ "dev": true }, "puppeteer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.2.0.tgz", - "integrity": "sha512-4sY/6mB7+kNPGAzPGKq65tH0VG3ohUEkXHuOReB9K/tw3m1TqifYmxnMR/uDeci/UPwyk5K1gWYh8rw0U0Zscw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.3.0.tgz", + "integrity": "sha512-wx10aPQPpGJVxdB6yoDSLm9p4rCwARUSLMVV0bx++owuqkvviXKyiFM3EWsywaFmjOKNPXacIjplF7xhHiFP3w==", "dev": true, "requires": { "debug": "2.6.9", @@ -9744,14 +9744,21 @@ "prop-types": "15.6.1" } }, + "react-lifecycles-compat": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.2.tgz", + "integrity": "sha512-pbZOSMVVkvppW7XRn9fcHK5OgEDnYLwMva7P6TgS44/SN9uGGjfh3Z1c8tomO+y4IsHQ6Fsz2EGwmE7sMeNZgQ==", + "dev": true + }, "react-modal": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.3.2.tgz", - "integrity": "sha512-DLrmPG9PyXWSNA2ve1LttnNRE9Umy3u3awFeK+72dLOksLM+EoTg8Z2h/i/DV3O8ZGvnEhacjAVXdZuRDGvaag==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.4.2.tgz", + "integrity": "sha512-4TC3RZeKPQwgX/1q9scgOIlR8dXBVqB1lMfpBpxRDrK6fqh5zu7IbvSqPArPh+ED/4lRQwezidE7Eex4q/t73Q==", "dev": true, "requires": { "exenv": "1.2.2", "prop-types": "15.6.1", + "react-lifecycles-compat": "3.0.2", "warning": "3.0.0" } }, @@ -10810,7 +10817,7 @@ "faye-websocket": "0.11.1", "inherits": "2.0.3", "json3": "3.3.2", - "url-parse": "1.3.0" + "url-parse": "1.4.0" }, "dependencies": { "faye-websocket": { @@ -11371,9 +11378,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { "setimmediate": "1.0.5" @@ -11763,19 +11770,19 @@ } }, "url-parse": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.3.0.tgz", - "integrity": "sha512-zPvPA3T7P6M+0iNsgX+iAcAz4GshKrowtQBHHc/28tVsBc8jK7VRCNX+2GEcoE6zDB6XqXhcyiUWPVZY6C70Cg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.0.tgz", + "integrity": "sha512-ERuGxDiQ6Xw/agN4tuoCRbmwRuZP0cJ1lJxJubXr5Q/5cDa78+Dc4wfvtxzhzhkm5VvmW6Mf8EVj9SPGN4l8Lg==", "dev": true, "requires": { - "querystringify": "1.0.0", + "querystringify": "2.0.0", "requires-port": "1.0.0" }, "dependencies": { "querystringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", "dev": true } } @@ -12039,7 +12046,7 @@ "requires": { "chokidar": "2.0.3", "graceful-fs": "4.1.11", - "neo-async": "2.5.0" + "neo-async": "2.5.1" } }, "wbuf": { @@ -12255,7 +12262,7 @@ "sockjs-client": "1.1.4", "spdy": "3.4.7", "strip-ansi": "3.0.1", - "supports-color": "5.3.0", + "supports-color": "5.4.0", "webpack-dev-middleware": "1.12.2", "yargs": "6.6.0" }, @@ -12401,9 +12408,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" diff --git a/uk.co.compucorp.civicrm.hrcore/package.json b/uk.co.compucorp.civicrm.hrcore/package.json index 3bce79924b3..c33970de61f 100644 --- a/uk.co.compucorp.civicrm.hrcore/package.json +++ b/uk.co.compucorp.civicrm.hrcore/package.json @@ -6,7 +6,7 @@ }, "devDependencies": { "ansi-colors": "^1.0.1", - "backstopjs": "^3.2.3", + "backstopjs": "^3.2.15", "civicrm-scssroot": "git://github.com/totten/civicrm-scssroot.git#v0.1.1", "detect-installed": "^2.0.4", "es6-promise": "^4.2.2", From bf8000085b4d1b5e7a22a16f3944957c3f6064a9 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 1 May 2018 12:56:34 +0100 Subject: [PATCH 088/251] FAR-248: Add condition for leave requests with non expired balances. Fix broken tests. --- .../API/Query/LeaveRequestSelect.php | 43 +++++++++++++++---- .../tests/phpunit/api/v3/LeaveRequestTest.php | 19 ++++---- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php index fc55ec9db0e..67bd3a27aee 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php @@ -133,9 +133,10 @@ private function addWhere(CRM_Utils_SQL_Select $customQuery) { } if(!empty($this->params['expired'])) { - $conditions[] = "lbc.expiry_date < '" . date('Y-m-d') . "'"; - $conditions[] = 'lbc.expired_balance_change_id IS NOT NULL'; - $conditions[] = 'lbc.amount < 0'; + $conditions[] = $this->getExpiredCondition(); + } + else{ + $conditions[] = $this->getNonExpiredCondition(); } if(!empty($this->params['public_holiday'])) { @@ -147,6 +148,33 @@ private function addWhere(CRM_Utils_SQL_Select $customQuery) { $customQuery->where($conditions); } + /** + * Returns the conditions for leave request with expired balance changes. + * + * @return string + */ + private function getExpiredCondition() { + $conditions = []; + $conditions[] = "lbc.expiry_date < '" . date('Y-m-d') . "'"; + $conditions[] = 'lbc.expired_balance_change_id IS NOT NULL'; + $conditions[] = 'lbc.amount < 0'; + + return implode(' AND ', $conditions); + } + + /** + * Returns the condition for leave requests with non-expired balance changes. + * + * @return string + */ + private function getNonExpiredCondition() { + $conditions = " + ((lbc.expiry_date >= '" . date('Y-m-d') . "' OR lbc.expiry_date IS NULL) AND lbc.expired_balance_change_id IS NULL) + OR (lbc.expiry_date < '" . date('Y-m-d') . "' AND ebc.amount = 0)"; + + return $conditions; + } + /** * Add the joins required to join LeaveRequest with LeaveRequestDate and then * with LeaveBalanceChange. @@ -179,11 +207,10 @@ private function addJoins(CRM_Utils_SQL_Select $query) { $joins[] = 'LEFT JOIN ' . RelationshipType::getTableName() . ' rt ON rt.id = r.relationship_type_id'; } - if(!empty($this->params['expired'])) { - $innerJoin = 'INNER JOIN ' . LeaveBalanceChange::getTableName() . ' lbc'; - $innerJoin .= " ON lbc.source_id = lrd.id AND lbc.source_type = '" . LeaveBalanceChange::SOURCE_LEAVE_REQUEST_DAY . "'"; - $joins[] = $innerJoin; - } + $innerJoin = 'INNER JOIN ' . LeaveBalanceChange::getTableName() . ' lbc'; + $innerJoin .= " ON lbc.source_id = lrd.id AND lbc.source_type = '" . LeaveBalanceChange::SOURCE_LEAVE_REQUEST_DAY . "'"; + $joins[] = $innerJoin; + $joins[] = 'LEFT JOIN ' . LeaveBalanceChange::getTableName() . ' ebc ON lbc.id = ebc.expired_balance_change_id'; $query->join(null, $joins); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index 3bb705baf84..0ea369eae21 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1174,7 +1174,7 @@ public function testGetAndGetFullDoesNotReturnSoftDeletedLeaveRequests() { $this->assertNotEmpty($resultGetFull['values'][$leaveRequest3->id]); } - public function testGetAndGetFullReturnAllLeaveRequestsWhenTheExpiredParamIsNotPresent() { + public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredParamIsNotPresent() { $type = AbsenceTypeFabricator::fabricate([ 'allow_accruals_request' => TRUE, 'max_leave_accrual' => 10 @@ -1185,8 +1185,8 @@ public function testGetAndGetFullReturnAllLeaveRequestsWhenTheExpiredParamIsNotP ['period_start_date' => '2016-01-01'] ); - // This request has 3 days expired, but will be included on - // the response anyway, since the "expired" flag is not set + // This request has 3 days expired, but will not included on + // the response since the "expired" flag is not set/false $toilRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contract['contact_id'], 'type_id' => $type->id, @@ -1222,9 +1222,8 @@ public function testGetAndGetFullReturnAllLeaveRequestsWhenTheExpiredParamIsNotP $resultGet = civicrm_api3('LeaveRequest', 'get'); $resultGetFull = civicrm_api3('LeaveRequest', 'getFull'); - $this->assertEquals(3, $resultGet['count']); - $this->assertEquals(3, $resultGetFull['count']); - $this->assertNotEmpty($resultGet['values'][$toilRequest1->id]); + $this->assertEquals(2, $resultGet['count']); + $this->assertEquals(2, $resultGetFull['count']); $this->assertNotEmpty($resultGet['values'][$toilRequest2->id]); $this->assertNotEmpty($resultGet['values'][$leaveRequest->id]); } @@ -1529,7 +1528,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsArray 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), 'from_date_type' => 1, 'to_date_type' => 1 - ]); + ], TRUE); $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember2['id'], @@ -1538,7 +1537,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsArray 'to_date' => CRM_Utils_Date::processDate('2016-05-02'), 'from_date_type' => 1, 'to_date_type' => 1 - ]); + ], TRUE); $result = civicrm_api3('LeaveRequest', 'get', ['unassigned' => true, @@ -1578,7 +1577,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsInteg 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), 'from_date_type' => 1, 'to_date_type' => 1 - ]); + ], TRUE); $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember2['id'], @@ -1587,7 +1586,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsInteg 'to_date' => CRM_Utils_Date::processDate('2016-05-02'), 'from_date_type' => 1, 'to_date_type' => 1 - ]); + ], TRUE); $result = civicrm_api3('LeaveRequest', 'get', ['unassigned' => true, From 31fe9f89ae5c1e4a74c242038d49151c4fd97478 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 1 May 2018 13:18:20 +0100 Subject: [PATCH 089/251] FAR-248: Add test for expired TOIL with Zero amount expired. --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index 0ea369eae21..acac12dfe3a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1228,6 +1228,54 @@ public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredP $this->assertNotEmpty($resultGet['values'][$leaveRequest->id]); } + public function testGetAndGetFullWillIncludeLeaveRequestWithExpiredBalanceOfZeroWhenTheExpiredParamIsFalse() { + $type = AbsenceTypeFabricator::fabricate([ + 'allow_accruals_request' => TRUE, + 'max_leave_accrual' => 10 + ]); + + $contract = HRJobContractFabricator::fabricate( + ['contact_id' => 1], + ['period_start_date' => '2016-01-01'] + ); + + // This request has 3 days expired, but will not included on + // the response since the "expired" flag is not set/false + $toilRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contract['contact_id'], + 'type_id' => $type->id, + 'from_date' => CRM_Utils_Date::processDate('2016-01-01'), + 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), + 'toil_duration' => 10, + 'toil_expiry_date' => CRM_Utils_Date::processDate('2016-01-10'), + 'toil_to_accrue' => 5, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ], TRUE); + //expire balance change but with an amount of zero which means the TOIl was used up before + //the expiry date. + $this->createExpiryBalanceChangeForTOILRequest($toilRequest1->id, 0); + + // this one is not expired yet + $toilRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contract['contact_id'], + 'type_id' => $type->id, + 'from_date' => CRM_Utils_Date::processDate('tomorrow'), + 'to_date' => CRM_Utils_Date::processDate('tomorrow'), + 'toil_duration' => 10, + 'toil_expiry_date' => CRM_Utils_Date::processDate('+30 days'), + 'toil_to_accrue' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ], TRUE); + + $resultGet = civicrm_api3('LeaveRequest', 'get', ['expired' => FALSE]); + $resultGetFull = civicrm_api3('LeaveRequest', 'getFull', ['expired' => FALSE]); + + $this->assertEquals(2, $resultGet['count']); + $this->assertEquals(2, $resultGetFull['count']); + $this->assertNotEmpty($resultGet['values'][$toilRequest1->id]); + $this->assertNotEmpty($resultGet['values'][$toilRequest2->id]); + } + public function testGetAndGetFullReturnOnlyLeaveRequestsWithExpiredBalanceChangesWhenTheExpiredParamIsPresent() { $type = AbsenceTypeFabricator::fabricate([ 'allow_accruals_request' => TRUE, From 5a9fe69e46f3b9b4628071ed05ea53b2458595cc Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 1 May 2018 14:16:29 +0100 Subject: [PATCH 090/251] FAR-248: Return all leave requests when the expired parameter is absent. Fix broken test. Remove unnecessary parameters in some tests. --- .../API/Query/LeaveRequestSelect.php | 15 +++++++++------ .../tests/phpunit/api/v3/LeaveRequestTest.php | 14 +++++++------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php index 67bd3a27aee..624a0344d38 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Query/LeaveRequestSelect.php @@ -132,10 +132,11 @@ private function addWhere(CRM_Utils_SQL_Select $customQuery) { } } - if(!empty($this->params['expired'])) { + if (isset($this->params['expired']) && $this->params['expired']) { $conditions[] = $this->getExpiredCondition(); } - else{ + + if (isset($this->params['expired']) && !$this->params['expired']) { $conditions[] = $this->getNonExpiredCondition(); } @@ -207,10 +208,12 @@ private function addJoins(CRM_Utils_SQL_Select $query) { $joins[] = 'LEFT JOIN ' . RelationshipType::getTableName() . ' rt ON rt.id = r.relationship_type_id'; } - $innerJoin = 'INNER JOIN ' . LeaveBalanceChange::getTableName() . ' lbc'; - $innerJoin .= " ON lbc.source_id = lrd.id AND lbc.source_type = '" . LeaveBalanceChange::SOURCE_LEAVE_REQUEST_DAY . "'"; - $joins[] = $innerJoin; - $joins[] = 'LEFT JOIN ' . LeaveBalanceChange::getTableName() . ' ebc ON lbc.id = ebc.expired_balance_change_id'; + if (isset($this->params['expired'])) { + $innerJoin = 'INNER JOIN ' . LeaveBalanceChange::getTableName() . ' lbc'; + $innerJoin .= " ON lbc.source_id = lrd.id AND lbc.source_type = '" . LeaveBalanceChange::SOURCE_LEAVE_REQUEST_DAY . "'"; + $joins[] = $innerJoin; + $joins[] = 'LEFT JOIN ' . LeaveBalanceChange::getTableName() . ' ebc ON lbc.id = ebc.expired_balance_change_id'; + } $query->join(null, $joins); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index acac12dfe3a..b60f6873101 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1174,7 +1174,7 @@ public function testGetAndGetFullDoesNotReturnSoftDeletedLeaveRequests() { $this->assertNotEmpty($resultGetFull['values'][$leaveRequest3->id]); } - public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredParamIsNotPresent() { + public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredParamFalse() { $type = AbsenceTypeFabricator::fabricate([ 'allow_accruals_request' => TRUE, 'max_leave_accrual' => 10 @@ -1219,8 +1219,8 @@ public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredP 'request_type' => LeaveRequest::REQUEST_TYPE_LEAVE ], TRUE); - $resultGet = civicrm_api3('LeaveRequest', 'get'); - $resultGetFull = civicrm_api3('LeaveRequest', 'getFull'); + $resultGet = civicrm_api3('LeaveRequest', 'get', ['expired' => FALSE]); + $resultGetFull = civicrm_api3('LeaveRequest', 'getFull', ['expired' => FALSE]); $this->assertEquals(2, $resultGet['count']); $this->assertEquals(2, $resultGetFull['count']); @@ -1576,7 +1576,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsArray 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), 'from_date_type' => 1, 'to_date_type' => 1 - ], TRUE); + ]); $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember2['id'], @@ -1585,7 +1585,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsArray 'to_date' => CRM_Utils_Date::processDate('2016-05-02'), 'from_date_type' => 1, 'to_date_type' => 1 - ], TRUE); + ]); $result = civicrm_api3('LeaveRequest', 'get', ['unassigned' => true, @@ -1625,7 +1625,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsInteg 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), 'from_date_type' => 1, 'to_date_type' => 1 - ], TRUE); + ]); $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember2['id'], @@ -1634,7 +1634,7 @@ public function testGetAndGetFullReturnsCorrectlyWhenTheContactIdIsPassedAsInteg 'to_date' => CRM_Utils_Date::processDate('2016-05-02'), 'from_date_type' => 1, 'to_date_type' => 1 - ], TRUE); + ]); $result = civicrm_api3('LeaveRequest', 'get', ['unassigned' => true, From 460502d52139a0637e1c29a87dba52b7b3bfe8cd Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 1 May 2018 16:47:29 +0100 Subject: [PATCH 091/251] FAR-248: PR Feedback: Update comments --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index b60f6873101..d6c202f26f4 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1185,8 +1185,8 @@ public function testGetAndGetFullReturnAllNonExpiredLeaveRequestsWhenTheExpiredP ['period_start_date' => '2016-01-01'] ); - // This request has 3 days expired, but will not included on - // the response since the "expired" flag is not set/false + // This request has 3 days expired, but will not be included on + // the response since the "expired" flag is FALSE. $toilRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contract['contact_id'], 'type_id' => $type->id, @@ -1239,8 +1239,8 @@ public function testGetAndGetFullWillIncludeLeaveRequestWithExpiredBalanceOfZero ['period_start_date' => '2016-01-01'] ); - // This request has 3 days expired, but will not included on - // the response since the "expired" flag is not set/false + // This request has 3 days expired, but will not be included on + // the response since the "expired" flag is FALSE $toilRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contract['contact_id'], 'type_id' => $type->id, From 891d4eef34f1adb4e87455a16ea39251716156e0 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 09:52:15 +0200 Subject: [PATCH 092/251] FAR-248: Change LeaveRequest.balanceChangeByAbsenceType signature --- contactsummary/js/dist/contact-summary.min.js | 2 +- .../js/angular/dist/absence-tab.min.js | 4 ++-- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 4 ++-- .../dist/manager-notification-badge.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../shared/models/leave-request.model.js | 23 ++++++++----------- .../shared/models/leave-request.model.spec.js | 2 +- 8 files changed, 18 insertions(+), 23 deletions(-) diff --git a/contactsummary/js/dist/contact-summary.min.js b/contactsummary/js/dist/contact-summary.min.js index 87668e6b8b2..4e29eea6746 100644 --- a/contactsummary/js/dist/contact-summary.min.js +++ b/contactsummary/js/dist/contact-summary.min.js @@ -1,3 +1,3 @@ define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(t,n,s,r){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();t&&n||o.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:s?{IN:s}:null,public_holiday:r||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){ -return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e,t,a,s){return n.balanceChangeByAbsenceType(e,t,a,s)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); +return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/contactsummary/js/dist/contact-summary.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 7cb75525582..135f0dbdaf8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t,n,o,s){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var i=a.defer();t&&n||i.reject("contact_id and period_id are mandatory");var r={contact_id:t,period_id:n,statuses:o?{IN:o}:null,public_holiday:s||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",r,!1).then(function(e){i.resolve(e.values)}),i.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e,t,a,o){return n.balanceChangeByAbsenceType(e,t,a,o)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h()) -})}n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=P(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function R(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function A(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[A(c.statusNames.approved),A(c.statusNames.adminApproved),A(c.statusNames.awaitingApproval),A(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=R(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function R(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function A(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(P).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=P,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&A).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(R).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(P).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?A.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(A.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){A=e})}function T(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function R(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var A=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=P,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return A("approved",{status_id:N(m.statusNames.approved)})}function C(){return n.all([c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,null,!0),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.approved)]),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)])]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function P(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),R({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function R(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function A(e,t){return R(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return A("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return A("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return A("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t,n,o,s){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var i=a.defer();t&&n||i.reject("contact_id and period_id are mandatory");var r={contact_id:t,period_id:n,statuses:o?{IN:o}:null,public_holiday:s||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",r,!1).then(function(e){i.resolve(e.values)}),i.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} +n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=P(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function R(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function A(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[A(c.statusNames.approved),A(c.statusNames.adminApproved),A(c.statusNames.awaitingApproval),A(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=R(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function R(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function A(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(P).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=P,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&A).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(R).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(P).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?A.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(A.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){A=e})}function T(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function R(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var A=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=P,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return A("approved",{status_id:N(m.statusNames.approved)})}function C(){return n.all([c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,null,!0),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.approved)]),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)])]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function P(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),R({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function R(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function A(e,t){return R(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return A("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return A("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return A("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(R)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return R(e).then(function(){O(e,!0)})})}function R(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function A(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),R("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?R("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=P,i.resetUIInputsExtended=A,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function R(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function A(){c.isMode("view")||(D(),T(),R())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=A,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(T)}function R(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function A(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=A();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Ae[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Ae.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Ae.awaiting_approval=e,Ae.more_information_required=e,Ae.rejected=e,Ae.approved=e,Ae.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Re={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Re.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){R(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Re.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),P(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Re,Ae={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){ g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 76648352352..53b871e6df2 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return U(e)&&e.then&&e.$$promises}if(!U(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!U(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},U(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||F(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!U(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=U(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=F(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:U(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return D[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return U(n)?e+G(n):(n=t.$eval(n),U(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,U=t.isObject,F=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){E.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function T(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function f(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?m():p()}function m(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),f(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return F[e]}function m(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=w(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){U.push(r.$on("LeaveCalendar::showMonths",M)),U.push(i.subscribe("LeaveRequest::new",c)),U.push(i.subscribe("LeaveRequest::edit",j)),U.push(i.subscribe("LeaveRequest::updatedByManager",j)),U.push(i.subscribe("LeaveRequest::delete",h)),U.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function A(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function w(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function S(){return W.month.loading=!0,a.all([O(),T()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function T(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:R()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){F=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),U.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?A(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&S())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==R().indexOf(e.status_id)&&c(e))}function B(e){return a.all(w(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,U=[],F={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=m,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}), define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){U(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,U("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(F).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(F).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,U("to"))}function U(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function F(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,U("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(D).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function D(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){F.filters.leaveRequest.contact_id=null,F.refresh()}function p(){var e=F.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?F.leaveRequests.filter.list.length:F.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(F.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(F.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(F.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(F.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.filters.leaveRequest.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){F.absenceTypes=e})}function w(e){return(F.isAdmin?r.all(p()):r.leaveManagees(F.contactId,p())).then(function(t){return F.filteredUsers=F.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){F.filters.leaveRequest.leaveStatus!==H&&0===F.leaveRequests.table.list.length&&F.refresh(1,!0)})}function D(){return s.valuesOf("hrjc_department").then(function(e){F.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:F.pagination,r="filter"===e?{return:["status_id"]}:{};return F.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){F.leaveRequests[e]=t}).catch(function(){F.leaveRequests[e].list=[]}).finally(function(){F.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){F.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){F.locations=e})}function T(t){var n=F.filters.leaveRequest;return{contact_id:E(),managed_by:F.isAdmin&&"me"!==n.assignedTo.type?void 0:F.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(F.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){F.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){F.leaveRequestStatuses=e.concat(F.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return F.filteredUsers.length>0&&F.filters.leaveRequest.contact_id?F.filters.leaveRequest.contact_id:{IN:F.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=F.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(F.filters.leaveRequest.leaveStatus=H),(e<=F.totalNoOfPages()||0===F.totalNoOfPages())&&(F.pagination.page=e,w(n))}function j(e){F.filters.leaveRequest.leaveStatus=e,F.refresh(1,!1,"table")}function B(e){F.filters.leaveRequest.assignedTo=e,F.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){F.refresh()}),f.subscribe("LeaveRequest::new",function(){F.refresh()}),f.subscribe("LeaveRequest::edit",function(){F.refresh()}),f.subscribe("LeaveRequest::delete",function(){F.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){F.refresh()})}function U(){return Math.ceil(F.leaveRequests.table.total/F.pagination.size)}t.debug("Component: manage-leave-requests");var F=this,H={name:"all",label:"All"};F.absencePeriods=[],F.absenceTypes=[],F.filteredUsers=[],F.isFilterExpanded=!1,F.isAdmin=!1,F.leaveRequests={table:{list:[]},filter:{list:[]}},F.leaveRequestStatuses=[H],F.loading={content:!0,page:!0,table:!0},F.pagination={page:1,size:7},F.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],F.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:F.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:F.filtersByAssignee[0]}},F.clearStaffSelection=m,F.countLeaveRequestByStatus=h,F.getAbsenceTypeByID=v,F.getArrayOfSize=g,F.getLeaveStatusByValue=b,F.getNavBadge=y,F.getUserNameByID=q,F.labelPeriod=$,F.openLeavePopup=x,F.refresh=k,F.refreshWithFilter=j,F.refreshWithFilterByAssignee=B,F.totalNoOfPages=U,function(){o(i.permissions.admin.administer).then(function(e){F.isAdmin=e,n.all([C(),A(),O(),D(),S(),R(),I()]).then(function(){F.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){T(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){T("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){ -var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),D())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e,t,a,r){return n.balanceChangeByAbsenceType(e,t,a,r)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){ +var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),D())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){ return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index fc7b12948a5..756ae112312 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return U(e)&&e.then&&e.$$promises}if(!U(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!U(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},U(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||F(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!U(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=U(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=F(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:U(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return U(n)?e+G(n):(n=t.$eval(n),U(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,U=t.isObject,F=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){E.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function T(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function f(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?m():p()}function m(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),f(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return F[e]}function m(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=w(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){U.push(r.$on("LeaveCalendar::showMonths",M)),U.push(i.subscribe("LeaveRequest::new",c)),U.push(i.subscribe("LeaveRequest::edit",j)),U.push(i.subscribe("LeaveRequest::updatedByManager",j)),U.push(i.subscribe("LeaveRequest::delete",h)),U.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function A(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function w(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function P(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function D(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return W.month.loading=!0,a.all([O(),T()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function T(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:R()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){F=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),U.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?A(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&S())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=P(e);t&&(h(t),-1!==R().indexOf(e.status_id)&&c(e))}function B(e){return a.all(w(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,U=[],F={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=m,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}), define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){U(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,U("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(F).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(F).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,U("to"))}function U(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function F(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,U("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function P(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){F.filters.leaveRequest.contact_id=null,F.refresh()}function p(){var e=F.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?F.leaveRequests.filter.list.length:F.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(F.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(F.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(F.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(F.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.filters.leaveRequest.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){F.absenceTypes=e})}function w(e){return(F.isAdmin?r.all(p()):r.leaveManagees(F.contactId,p())).then(function(t){return F.filteredUsers=F.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){F.filters.leaveRequest.leaveStatus!==H&&0===F.leaveRequests.table.list.length&&F.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){F.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:F.pagination,r="filter"===e?{return:["status_id"]}:{};return F.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){F.leaveRequests[e]=t}).catch(function(){F.leaveRequests[e].list=[]}).finally(function(){F.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){F.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){F.locations=e})}function T(t){var n=F.filters.leaveRequest;return{contact_id:E(),managed_by:F.isAdmin&&"me"!==n.assignedTo.type?void 0:F.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(F.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){F.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){F.leaveRequestStatuses=e.concat(F.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return F.filteredUsers.length>0&&F.filters.leaveRequest.contact_id?F.filters.leaveRequest.contact_id:{IN:F.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=F.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(F.filters.leaveRequest.leaveStatus=H),(e<=F.totalNoOfPages()||0===F.totalNoOfPages())&&(F.pagination.page=e,w(n))}function j(e){F.filters.leaveRequest.leaveStatus=e,F.refresh(1,!1,"table")}function B(e){F.filters.leaveRequest.assignedTo=e,F.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){F.refresh()}),f.subscribe("LeaveRequest::new",function(){F.refresh()}),f.subscribe("LeaveRequest::edit",function(){F.refresh()}),f.subscribe("LeaveRequest::delete",function(){F.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){F.refresh()})}function U(){return Math.ceil(F.leaveRequests.table.total/F.pagination.size)}t.debug("Component: manage-leave-requests");var F=this,H={name:"all",label:"All"};F.absencePeriods=[],F.absenceTypes=[],F.filteredUsers=[],F.isFilterExpanded=!1,F.isAdmin=!1,F.leaveRequests={table:{list:[]},filter:{list:[]}},F.leaveRequestStatuses=[H],F.loading={content:!0,page:!0,table:!0},F.pagination={page:1,size:7},F.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],F.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:F.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:F.filtersByAssignee[0]}},F.clearStaffSelection=m,F.countLeaveRequestByStatus=h,F.getAbsenceTypeByID=v,F.getArrayOfSize=g,F.getLeaveStatusByValue=b,F.getNavBadge=y,F.getUserNameByID=q,F.labelPeriod=$,F.openLeavePopup=x,F.refresh=k,F.refreshWithFilter=j,F.refreshWithFilterByAssignee=B,F.totalNoOfPages=U,function(){o(i.permissions.admin.administer).then(function(e){F.isAdmin=e,n.all([C(),A(),O(),P(),S(),R(),I()]).then(function(){F.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){T(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){T("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}), -define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e,t,a,r){return n.balanceChangeByAbsenceType(e,t,a,r)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){ -return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){ +t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js index 11751e76d9a..d31c0137f15 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js @@ -1,2 +1,2 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(n,t,s,i){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();n&&t||o.reject("contact_id and period_id are mandatory");var c={contact_id:n,period_id:t,statuses:s?{IN:s}:null,public_holiday:i||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",c,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e,n,a,s){return t.balanceChangeByAbsenceType(e,n,a,s)},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-notification-badge.component",["leave-absences/shared/modules/components"],function(e){function n(e,n,t){function a(){return t.all(i.filters,null,null,null,!1).then(function(e){i.count=e.list.length})}function s(){n.subscribe(i.refreshCountEventName,a)}e.debug("Component: leave-notification-badge");var i=this;i.count=0,function(){s(),a()}()}e.component("leaveNotificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-notification-badge.html"}],controllerAs:"badge",controller:n}),n.$inject=["$log","pubSub","LeaveRequest"]}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){u.managed_by=e.contactId})}function c(){return r().then(function(n){u.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u={},l=this;l.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){l.filters=u})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/shared/components/leave-notification-badge.component","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","leave-absences.settings","leave-absences.models","leave-absences.components","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(n,t,s,i){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();n&&t||o.reject("contact_id and period_id are mandatory");var c={contact_id:n,period_id:t,statuses:s?{IN:s}:null,public_holiday:i||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",c,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(e)},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-notification-badge.component",["leave-absences/shared/modules/components"],function(e){function n(e,n,t){function a(){return t.all(i.filters,null,null,null,!1).then(function(e){i.count=e.list.length})}function s(){n.subscribe(i.refreshCountEventName,a)}e.debug("Component: leave-notification-badge");var i=this;i.count=0,function(){s(),a()}()}e.component("leaveNotificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-notification-badge.html"}],controllerAs:"badge",controller:n}),n.$inject=["$log","pubSub","LeaveRequest"]}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){u.managed_by=e.contactId})}function c(){return r().then(function(n){u.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u={},l=this;l.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){l.filters=u})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/shared/components/leave-notification-badge.component","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","leave-absences.settings","leave-absences.models","leave-absences.components","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 461c5e472f6..95fdf948755 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e,t,a,r){return n.balanceChangeByAbsenceType(e,t,a,r)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ +;return!0===t?0===f(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){return n.all([u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,null,!0),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.approved)]),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)])]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){ H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(I))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function I(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function x(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&I(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([x(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js index 3b4389db882..a342d3ad154 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js @@ -22,10 +22,10 @@ define([ * Get all the Leave Requests. * It supports filters, pagination, sort and extra params * - * @param {object} filters - Values the full list should be filtered by - * @param {object} pagination + * @param {Object} filters Values the full list should be filtered by + * @param {Object} pagination * `page` for the current page, `size` for number of items per page - * @param {string} sort - The field and direction to order by + * @param {String} sort The field and direction to order by * @param {Object} params * @param {Boolean} cache * @return {Promise} resolves with {Object} @@ -45,23 +45,18 @@ define([ * Get all the total change in balance that is caused by the * leave requests of a given absence type, or of all the absence types of a given contact and period. * - * @param {string} contactId The ID of the Contact to get the balance change for - * @param {string} periodId The ID of the Absence Period to get the balance change for - * @param statuses {array} An array of OptionValue values which the list will be filtered by - * @param isPublicHoliday {boolean} Based on the value of this param, - * the calculation will include only the leave requests that aren't/are public holidays - * @return {Promise} Resolved with {Object} Balance Change data + * @param {Object} params + * @return {Promise} Resolves with {Object} Balance Change data */ - balanceChangeByAbsenceType: function (contactId, periodId, statuses, isPublicHoliday) { - return leaveRequestAPI.balanceChangeByAbsenceType(contactId, periodId, statuses, isPublicHoliday); + balanceChangeByAbsenceType: function (params) { + return leaveRequestAPI.balanceChangeByAbsenceType(params); }, /** * Get leave request for the given id * - * @param {object} id - leave request id - * - * @return {Promise} resolves with {Object} + * @param {Object} id leave request id + * @return {Promise} Resolves with {Object} */ find: function (id) { return leaveRequestAPI.find(id) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js index 6444385fc57..625de20b784 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js @@ -85,7 +85,7 @@ define([ var leaveRequestPromise; beforeEach(function () { - leaveRequestPromise = LeaveRequest.balanceChangeByAbsenceType(jasmine.any(String), jasmine.any(String)); + leaveRequestPromise = LeaveRequest.balanceChangeByAbsenceType(jasmine.any(Object)); }); afterEach(function () { From 5210805f9ad8198a27bfa74a6aba0ba70386a976 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 09:56:30 +0200 Subject: [PATCH 093/251] FAR-248: Add missing mocked api dependency --- .../js/angular/test/shared/models/leave-request.model.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js index 625de20b784..b5b35f85a90 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/models/leave-request.model.spec.js @@ -2,7 +2,8 @@ define([ 'leave-absences/shared/models/leave-request.model', - 'leave-absences/mocks/apis/leave-request-api-mock' + 'leave-absences/mocks/apis/leave-request-api-mock', + 'leave-absences/mocks/apis/option-group-api-mock' ], function () { 'use strict'; From 785fc68970c3ac13d69876bd1c13402da4e2cc4b Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 10:04:35 +0200 Subject: [PATCH 094/251] FAR-248: Change LeaveRequestAPI.balanceChangeByAbsenceType signature --- contactsummary/js/dist/contact-summary.min.js | 4 +- .../js/angular/dist/absence-tab.min.js | 2 +- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 2 +- .../dist/manager-notification-badge.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 8 +- .../shared/apis/leave-request.api.js | 91 +++++++++---------- .../shared/apis/leave-request.api.spec.js | 22 +++-- 8 files changed, 63 insertions(+), 70 deletions(-) diff --git a/contactsummary/js/dist/contact-summary.min.js b/contactsummary/js/dist/contact-summary.min.js index 4e29eea6746..0ac36b30b97 100644 --- a/contactsummary/js/dist/contact-summary.min.js +++ b/contactsummary/js/dist/contact-summary.min.js @@ -1,3 +1,3 @@ -define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(t,n,s,r){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();t&&n||o.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:s?{IN:s}:null,public_holiday:r||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){ -return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); +define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return n.contact_id&&n.period_id||s.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){ +return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/contactsummary/js/dist/contact-summary.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 135f0dbdaf8..26272e36509 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,4 +1,4 @@ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t,n,o,s){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var i=a.defer();t&&n||i.reject("contact_id and period_id are mandatory");var r={contact_id:t,period_id:n,statuses:o?{IN:o}:null,public_holiday:s||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",r,!1).then(function(e){i.resolve(e.values)}),i.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=P(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function R(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function A(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[A(c.statusNames.approved),A(c.statusNames.adminApproved),A(c.statusNames.awaitingApproval),A(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=R(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function R(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function A(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(P).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=P,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&A).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(R).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(P).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?A.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(A.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){A=e})}function T(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function R(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var A=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=P,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return A("approved",{status_id:N(m.statusNames.approved)})}function C(){return n.all([c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,null,!0),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.approved)]),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)])]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function P(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),R({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function R(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function A(e,t){return R(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return A("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return A("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return A("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(R)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return R(e).then(function(){O(e,!0)})})}function R(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function A(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),R("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?R("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=P,i.resetUIInputsExtended=A,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function R(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function A(){c.isMode("view")||(D(),T(),R())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=A,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(T)}function R(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function A(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=A();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Ae[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Ae.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Ae.awaiting_approval=e,Ae.more_information_required=e,Ae.rejected=e,Ae.approved=e,Ae.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Re={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Re.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){R(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Re.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),P(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Re,Ae={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){ g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 53b871e6df2..574e6f80170 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return U(e)&&e.then&&e.$$promises}if(!U(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!U(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},U(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||F(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!U(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=U(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=F(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:U(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return D[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return U(n)?e+G(n):(n=t.$eval(n),U(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,U=t.isObject,F=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){E.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function T(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function f(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?m():p()}function m(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),f(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return F[e]}function m(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=w(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){U.push(r.$on("LeaveCalendar::showMonths",M)),U.push(i.subscribe("LeaveRequest::new",c)),U.push(i.subscribe("LeaveRequest::edit",j)),U.push(i.subscribe("LeaveRequest::updatedByManager",j)),U.push(i.subscribe("LeaveRequest::delete",h)),U.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function A(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function w(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function S(){return W.month.loading=!0,a.all([O(),T()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function T(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:R()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){F=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),U.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?A(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&S())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==R().indexOf(e.status_id)&&c(e))}function B(e){return a.all(w(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,U=[],F={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=m,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}), define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){U(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,U("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(F).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(F).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,U("to"))}function U(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function F(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,U("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(D).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function D(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){F.filters.leaveRequest.contact_id=null,F.refresh()}function p(){var e=F.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?F.leaveRequests.filter.list.length:F.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(F.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(F.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(F.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(F.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.filters.leaveRequest.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){F.absenceTypes=e})}function w(e){return(F.isAdmin?r.all(p()):r.leaveManagees(F.contactId,p())).then(function(t){return F.filteredUsers=F.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){F.filters.leaveRequest.leaveStatus!==H&&0===F.leaveRequests.table.list.length&&F.refresh(1,!0)})}function D(){return s.valuesOf("hrjc_department").then(function(e){F.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:F.pagination,r="filter"===e?{return:["status_id"]}:{};return F.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){F.leaveRequests[e]=t}).catch(function(){F.leaveRequests[e].list=[]}).finally(function(){F.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){F.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){F.locations=e})}function T(t){var n=F.filters.leaveRequest;return{contact_id:E(),managed_by:F.isAdmin&&"me"!==n.assignedTo.type?void 0:F.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(F.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){F.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){F.leaveRequestStatuses=e.concat(F.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return F.filteredUsers.length>0&&F.filters.leaveRequest.contact_id?F.filters.leaveRequest.contact_id:{IN:F.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=F.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(F.filters.leaveRequest.leaveStatus=H),(e<=F.totalNoOfPages()||0===F.totalNoOfPages())&&(F.pagination.page=e,w(n))}function j(e){F.filters.leaveRequest.leaveStatus=e,F.refresh(1,!1,"table")}function B(e){F.filters.leaveRequest.assignedTo=e,F.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){F.refresh()}),f.subscribe("LeaveRequest::new",function(){F.refresh()}),f.subscribe("LeaveRequest::edit",function(){F.refresh()}),f.subscribe("LeaveRequest::delete",function(){F.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){F.refresh()})}function U(){return Math.ceil(F.leaveRequests.table.total/F.pagination.size)}t.debug("Component: manage-leave-requests");var F=this,H={name:"all",label:"All"};F.absencePeriods=[],F.absenceTypes=[],F.filteredUsers=[],F.isFilterExpanded=!1,F.isAdmin=!1,F.leaveRequests={table:{list:[]},filter:{list:[]}},F.leaveRequestStatuses=[H],F.loading={content:!0,page:!0,table:!0},F.pagination={page:1,size:7},F.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],F.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:F.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:F.filtersByAssignee[0]}},F.clearStaffSelection=m,F.countLeaveRequestByStatus=h,F.getAbsenceTypeByID=v,F.getArrayOfSize=g,F.getLeaveStatusByValue=b,F.getNavBadge=y,F.getUserNameByID=q,F.labelPeriod=$,F.openLeavePopup=x,F.refresh=k,F.refreshWithFilter=j,F.refreshWithFilterByAssignee=B,F.totalNoOfPages=U,function(){o(i.permissions.admin.administer).then(function(e){F.isAdmin=e,n.all([C(),A(),O(),D(),S(),R(),I()]).then(function(){F.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){T(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){T("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){ -var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),D())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){ +var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),D())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){ return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 756ae112312..381f8c4ef98 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return U(e)&&e.then&&e.$$promises}if(!U(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!U(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},U(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||F(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!U(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=U(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=F(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:U(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return U(n)?e+G(n):(n=t.$eval(n),U(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,U=t.isObject,F=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){E.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function T(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function f(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?m():p()}function m(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),f(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return F[e]}function m(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=w(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){U.push(r.$on("LeaveCalendar::showMonths",M)),U.push(i.subscribe("LeaveRequest::new",c)),U.push(i.subscribe("LeaveRequest::edit",j)),U.push(i.subscribe("LeaveRequest::updatedByManager",j)),U.push(i.subscribe("LeaveRequest::delete",h)),U.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function A(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function w(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function P(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function D(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return W.month.loading=!0,a.all([O(),T()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function T(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:R()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){F=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),U.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?A(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&S())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=P(e);t&&(h(t),-1!==R().indexOf(e.status_id)&&c(e))}function B(e){return a.all(w(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,U=[],F={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=m,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}), define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){U(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,U("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(F).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(F).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,U("to"))}function U(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function F(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,U("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function P(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){F.filters.leaveRequest.contact_id=null,F.refresh()}function p(){var e=F.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?F.leaveRequests.filter.list.length:F.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(F.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(F.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(F.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(F.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.filters.leaveRequest.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){F.absenceTypes=e})}function w(e){return(F.isAdmin?r.all(p()):r.leaveManagees(F.contactId,p())).then(function(t){return F.filteredUsers=F.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){F.filters.leaveRequest.leaveStatus!==H&&0===F.leaveRequests.table.list.length&&F.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){F.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:F.pagination,r="filter"===e?{return:["status_id"]}:{};return F.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){F.leaveRequests[e]=t}).catch(function(){F.leaveRequests[e].list=[]}).finally(function(){F.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){F.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){F.locations=e})}function T(t){var n=F.filters.leaveRequest;return{contact_id:E(),managed_by:F.isAdmin&&"me"!==n.assignedTo.type?void 0:F.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(F.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){F.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){F.leaveRequestStatuses=e.concat(F.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return F.filteredUsers.length>0&&F.filters.leaveRequest.contact_id?F.filters.leaveRequest.contact_id:{IN:F.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=F.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(F.filters.leaveRequest.leaveStatus=H),(e<=F.totalNoOfPages()||0===F.totalNoOfPages())&&(F.pagination.page=e,w(n))}function j(e){F.filters.leaveRequest.leaveStatus=e,F.refresh(1,!1,"table")}function B(e){F.filters.leaveRequest.assignedTo=e,F.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){F.refresh()}),f.subscribe("LeaveRequest::new",function(){F.refresh()}),f.subscribe("LeaveRequest::edit",function(){F.refresh()}),f.subscribe("LeaveRequest::delete",function(){F.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){F.refresh()})}function U(){return Math.ceil(F.leaveRequests.table.total/F.pagination.size)}t.debug("Component: manage-leave-requests");var F=this,H={name:"all",label:"All"};F.absencePeriods=[],F.absenceTypes=[],F.filteredUsers=[],F.isFilterExpanded=!1,F.isAdmin=!1,F.leaveRequests={table:{list:[]},filter:{list:[]}},F.leaveRequestStatuses=[H],F.loading={content:!0,page:!0,table:!0},F.pagination={page:1,size:7},F.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],F.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:F.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:F.filtersByAssignee[0]}},F.clearStaffSelection=m,F.countLeaveRequestByStatus=h,F.getAbsenceTypeByID=v,F.getArrayOfSize=g,F.getLeaveStatusByValue=b,F.getNavBadge=y,F.getUserNameByID=q,F.labelPeriod=$,F.openLeavePopup=x,F.refresh=k,F.refreshWithFilter=j,F.refreshWithFilterByAssignee=B,F.totalNoOfPages=U,function(){o(i.permissions.admin.administer).then(function(e){F.isAdmin=e,n.all([C(),A(),O(),P(),S(),R(),I()]).then(function(){F.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){T(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){T("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}), -define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){ +define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){ t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js index d31c0137f15..98394b924bf 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js @@ -1,2 +1,2 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(n,t,s,i){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();n&&t||o.reject("contact_id and period_id are mandatory");var c={contact_id:n,period_id:t,statuses:s?{IN:s}:null,public_holiday:i||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",c,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(e)},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-notification-badge.component",["leave-absences/shared/modules/components"],function(e){function n(e,n,t){function a(){return t.all(i.filters,null,null,null,!1).then(function(e){i.count=e.list.length})}function s(){n.subscribe(i.refreshCountEventName,a)}e.debug("Component: leave-notification-badge");var i=this;i.count=0,function(){s(),a()}()}e.component("leaveNotificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-notification-badge.html"}],controllerAs:"badge",controller:n}),n.$inject=["$log","pubSub","LeaveRequest"]}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){u.managed_by=e.contactId})}function c(){return r().then(function(n){u.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u={},l=this;l.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){l.filters=u})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/shared/components/leave-notification-badge.component","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","leave-absences.settings","leave-absences.models","leave-absences.components","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return t.contact_id&&t.period_id||s.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(e)},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-notification-badge.component",["leave-absences/shared/modules/components"],function(e){function n(e,n,t){function a(){return t.all(i.filters,null,null,null,!1).then(function(e){i.count=e.list.length})}function s(){n.subscribe(i.refreshCountEventName,a)}e.debug("Component: leave-notification-badge");var i=this;i.count=0,function(){s(),a()}()}e.component("leaveNotificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-notification-badge.html"}],controllerAs:"badge",controller:n}),n.$inject=["$log","pubSub","LeaveRequest"]}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){u.managed_by=e.contactId})}function c(){return r().then(function(n){u.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u={},l=this;l.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){l.filters=u})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/shared/components/leave-notification-badge.component","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","leave-absences.settings","leave-absences.models","leave-absences.components","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 95fdf948755..89510fd4392 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(t,n,r,o){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();t&&n||s.reject("contact_id and period_id are mandatory");var i={contact_id:t,period_id:n,statuses:r?{IN:r}:null,public_holiday:o||!1};return this.sendGET("LeaveRequest","getbalancechangebyabsencetype",i,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ -e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){return n.all([u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,null,!0),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.approved)]),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)])]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){ -H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(I))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function I(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function x(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&I(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([x(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ +e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){return n.all([u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,null,!0),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.approved)]),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)])]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){ +H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js index 0da8fe32c30..175cdb7aabc 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js @@ -45,32 +45,23 @@ define([ * This method returns all the total change in balance that is caused by the * leave requests of a given absence type, or of all the absence types of a given contact and period. * - * @param {string} contactId The ID of the Contact to get the balance change for - * @param {string} periodId The ID of the Absence Period to get the balance change for - * @param {array} [statuses = null] An array of OptionValue values which the list will be filtered by - * @param {boolean} [isPublicHoliday=false] Based on the value of this param, - * the calculation will include only the leave requests that aren't/are public holidays + * @param {string} params * @return {Promise} Resolved with {Object} Balance Change data or Error data */ - balanceChangeByAbsenceType: function (contactId, periodId, statuses, isPublicHoliday) { + balanceChangeByAbsenceType: function (params) { $log.debug('LeaveRequestAPI.balanceChangeByAbsenceType'); var deferred = $q.defer(); - if (!contactId || !periodId) { + if (!params.contact_id || !params.period_id) { deferred.reject('contact_id and period_id are mandatory'); } - var params = { - contact_id: contactId, - period_id: periodId, - statuses: statuses ? {'IN': statuses} : null, - public_holiday: isPublicHoliday || false - }; + params = _.defaults(params, { statuses: null, public_holiday: false }); this.sendGET('LeaveRequest', 'getbalancechangebyabsencetype', params, false) - .then(function (data) { - deferred.resolve(data.values); - }); + .then(function (data) { + deferred.resolve(data.values); + }); return deferred.promise; }, @@ -171,9 +162,9 @@ define([ }); return this.sendPOST('LeaveRequest', 'deleteattachment', params) - .then(function (result) { - return result.values; - }); + .then(function (result) { + return result.values; + }); }, /** @@ -190,9 +181,9 @@ define([ }); return this.sendPOST('LeaveRequest', 'deletecomment', params) - .then(function (commentsData) { - return commentsData.values; - }); + .then(function (commentsData) { + return commentsData.values; + }); }, /** @@ -206,13 +197,13 @@ define([ $log.debug('LeaveRequestAPI.find'); return this.sendGET('LeaveRequest', 'getFull', { id: id }) - .then(function (response) { - if (response.values.length === 0) { - return $q.reject('LeaveRequest not found with this ID'); - } + .then(function (response) { + if (response.values.length === 0) { + return $q.reject('LeaveRequest not found with this ID'); + } - return response.values[0]; - }); + return response.values[0]; + }); }, /** @@ -229,9 +220,9 @@ define([ }); return this.sendGET('LeaveRequest', 'getattachments', params, false) - .then(function (attachments) { - return attachments.values; - }); + .then(function (attachments) { + return attachments.values; + }); }, /** @@ -248,9 +239,9 @@ define([ }); return this.sendGET('LeaveRequest', 'getcomment', params, false) - .then(function (commentsData) { - return commentsData.values; - }); + .then(function (commentsData) { + return commentsData.values; + }); }, /** @@ -267,9 +258,9 @@ define([ leave_request_id: leaveRequestID, contact_id: contactID }) - .then(function (response) { - return response.values; - }); + .then(function (response) { + return response.values; + }); }, /** @@ -285,13 +276,13 @@ define([ var deferred = $q.defer(); this.sendPOST('LeaveRequest', 'isValid', params) - .then(function (data) { - if (data.count > 0) { - deferred.reject(_(data.values).map().flatten().value()); - } else { - deferred.resolve(data.values); - } - }); + .then(function (data) { + if (data.count > 0) { + deferred.reject(_(data.values).map().flatten().value()); + } else { + deferred.resolve(data.values); + } + }); return deferred.promise; }, @@ -313,9 +304,9 @@ define([ }); return this.sendPOST('LeaveRequest', 'addcomment', params) - .then(function (commentsData) { - return commentsData.values; - }); + .then(function (commentsData) { + return commentsData.values; + }); }, /** @@ -333,9 +324,9 @@ define([ } return this.sendPOST('LeaveRequest', 'create', params) - .then(function (data) { - return data.values[0]; - }); + .then(function (data) { + return data.values[0]; + }); } }); }]); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js index bce43676dae..2ff9df18d3e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js @@ -87,7 +87,12 @@ define([ var statuses = [jasmine.any(String), jasmine.any(String), jasmine.any(String)]; beforeEach(function () { - promise = LeaveRequestAPI.balanceChangeByAbsenceType(jasmine.any(String), jasmine.any(String), statuses, true); + promise = LeaveRequestAPI.balanceChangeByAbsenceType({ + contact_id: jasmine.any(String), + period_id: jasmine.any(String), + statuses: { IN: statuses }, + public_holiday: true + }); }); afterEach(function () { @@ -101,12 +106,6 @@ define([ }); }); - it('sends as `statuses` an "IN" parameter', function () { - expect(LeaveRequestAPI.sendGET.calls.mostRecent().args[2]).toEqual(jasmine.objectContaining({ - statuses: { 'IN': statuses } - })); - }); - it('returns the api data as is', function () { promise.then(function (response) { expect(response).toEqual(mockData.balanceChangeByAbsenceType().values); @@ -121,7 +120,10 @@ define([ describe('when passing falsy values for status and publicHolidays', function () { beforeEach(function () { - LeaveRequestAPI.balanceChangeByAbsenceType(jasmine.any(String), jasmine.any(String)); + LeaveRequestAPI.balanceChangeByAbsenceType({ + contact_id: jasmine.any(String), + period_id: jasmine.any(String) + }); }); it('assigns default values to them', function () { @@ -135,12 +137,12 @@ define([ describe('error handling', function () { it('throws error if contact_id is blank', function () { - LeaveRequestAPI.balanceChangeByAbsenceType(null, jasmine.any(String)) + LeaveRequestAPI.balanceChangeByAbsenceType({ period_id: jasmine.any(String) }) .catch(commonExpect); }); it('throws error if periodId is blank', function () { - LeaveRequestAPI.balanceChangeByAbsenceType(jasmine.any(String), null) + LeaveRequestAPI.balanceChangeByAbsenceType({ contact_id: jasmine.any(String) }) .catch(commonExpect); }); From 2c06eadadbe926c32cc5b1392a07a979a4138edd Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 10:09:01 +0200 Subject: [PATCH 095/251] FAR-248: Fix documentation --- .../shared/apis/leave-request.api.js | 76 +++++++++---------- 1 file changed, 34 insertions(+), 42 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js index 175cdb7aabc..e885aeebd7f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js @@ -17,13 +17,13 @@ define([ * This method returns all the Leave Requests. * It supports filters, pagination, sort and extra params * - * @param {object} filters - Values the full list should be filtered by - * @param {object} pagination + * @param {Object} filters Values the full list should be filtered by + * @param {Object} pagination * `page` for the current page, `size` for number of items per page - * @param {string} sort - The field and direction to order by + * @param {String} sort The field and direction to order by * @param {Object} params * @param {Boolean} cache - * @return {Promise} Resolved with {Object} All leave requests + * @return {Promise} Resolves with {Object} All leave requests */ all: function (filters, pagination, sort, params, cache) { $log.debug('LeaveRequestAPI.all'); @@ -45,8 +45,8 @@ define([ * This method returns all the total change in balance that is caused by the * leave requests of a given absence type, or of all the absence types of a given contact and period. * - * @param {string} params - * @return {Promise} Resolved with {Object} Balance Change data or Error data + * @param {Object} params + * @return {Promise} Resolves with {Object} Balance Change data or Error data */ balanceChangeByAbsenceType: function (params) { $log.debug('LeaveRequestAPI.balanceChangeByAbsenceType'); @@ -70,10 +70,9 @@ define([ * Gets the overall balance change after a leave request is created. The * API will create and return the detailed breakdown of it in days. * - * @param {Object} params matched the API end point params like + * @param {Object} params matched the API end point params like * mandatory values for contact_id, from_date, from_date_type and optional values for * to_date and to_date_type. - * * @return {Promise} containing the detailed breakdown of balance leaves */ calculateBalanceChange: function (params) { @@ -94,8 +93,8 @@ define([ * Gets the balance change breakdown * @NOTE: This breakdown is not affected by a work pattern change * - * @param {Integer} leaveRequestId Leave Request ID - * @return {Promise} resolves with the detailed balance breakdown + * @param {Number} leaveRequestId Leave Request ID + * @return {Promise} Resolves with the detailed balance breakdown */ getBalanceChangeBreakdown: function (leaveRequestId) { return this.sendGET('LeaveRequest', 'getBreakdown', @@ -104,11 +103,11 @@ define([ /** * Get the "from" and "to" times and number of hours - * for a given date according to the current work pattern + * for a given date according to the current work pattern * * @param {String} leaveDate in the "YYYY-MM-DD" format * @param {String|Number} contactId - * @return {Promise} resolved with the response + * @return {Promise} Resolves with the response * as per LeaveRequest.getWorkDayForDate API */ getWorkDayForDate: function (date, contactId) { @@ -119,11 +118,10 @@ define([ /** * Create a new leave request with given params. * - * @param {Object} params matched the API end point params with + * @param {Object} params matched the API end point params with * mandatory values for contact_id, status_id, from_date, from_date_type * and optional values for to_date and to_date_type. * If to_date is given then to_date_type is also mandotory. - * * @return {Promise} containing the leave request object additionally with id key set * else rejects the promise with error data */ @@ -139,7 +137,7 @@ define([ /** * Calls the `delete` endpoint with the given leave request id * - * @param {int/string} id + * @param {Number/String} id * @return {Promise} */ delete: function (id) { @@ -149,10 +147,9 @@ define([ /** * Calls the deletecomment backend API. * - * @param {String} leaveRequestID - leave request ID - * @param {String} attachmentID - attachment ID - * @param {Object} params - * + * @param {String} leaveRequestID + * @param {String} attachmentID + * @param {Object} params * @return {Promise} */ deleteAttachment: function (leaveRequestID, attachmentID, params) { @@ -170,9 +167,8 @@ define([ /** * Calls the deletecomment backend API. * - * @param {String} commentID - comment ID - * @param {Object} params - * + * @param {String} commentID + * @param {Object} params * @return {Promise} */ deleteComment: function (commentID, params) { @@ -189,9 +185,8 @@ define([ /** * Get leave request for the given id * - * @param {object} id - leave request id - * - * @return {Promise} resolves with {Object} + * @param {Object} id leave request id + * @return {Promise} Resolves with {Object} */ find: function (id) { $log.debug('LeaveRequestAPI.find'); @@ -209,9 +204,8 @@ define([ /** * Calls the getattachments backend API. * - * @param {String} leaveRequestID - ID of leave request - * @param {Object} params - * + * @param {String} leaveRequestID ID of leave request + * @param {Object} params * @return {Promise} */ getAttachments: function (leaveRequestID, params) { @@ -228,9 +222,8 @@ define([ /** * Calls the getcomment backend API. * - * @param {String} leaveRequestID - ID of leave request - * @param {Object} params - * + * @param {String} leaveRequestID + * @param {Object} params * @return {Promise} */ getComments: function (leaveRequestID, params) { @@ -247,9 +240,9 @@ define([ /** * Calls the isManagedBy backend API. * - * @param {String} leaveRequestID - ID of leave request - * @param {String} contactID - ID of contact - * @return {Promise} resolves with an {Boolean} + * @param {String} leaveRequestID + * @param {String} contactID + * @return {Promise} Resolves with a {Boolean} */ isManagedBy: function (leaveRequestID, contactID) { $log.debug('LeaveRequestAPI.isManagedBy'); @@ -267,9 +260,9 @@ define([ * Validate params for a new new leave request. It can be used before * creating a leave request to validate data. * - * @param {Object} params matched the API end point params with + * @param {Object} params matched the API end point params with * values like contact_id, status_id, from_date, from_date_type etc., - * @return {Promise} returns an array of errors for invalid data else empty array + * @return {Promise} Returns an array of errors for invalid data else empty array */ isValid: function (params) { $log.debug('LeaveRequestAPI.isValid', params); @@ -290,10 +283,9 @@ define([ /** * Calls the addcomment backend API. * - * @param {string} leaveRequestID - ID of Leave Request - * @param {Object} comment - Comment object - * @param {Object} params - * + * @param {String} leaveRequestID + * @param {Object} comment + * @param {Object} params * @return {Promise} */ saveComment: function (leaveRequestID, comment, params) { @@ -312,8 +304,8 @@ define([ /** * This method is used to update a leave request * - * @param {object} params - Updated values of leave request - * @return {Promise} Resolved with {Object} Updated Leave request + * @param {Object} params Updated values of leave request + * @return {Promise} Resolves with {Object} Updated Leave request */ update: function (params) { $log.debug('LeaveRequestAPI.update', params); From eecd58b00b4498e9426cb8c15f3b827a48e408cc Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 10:56:54 +0200 Subject: [PATCH 096/251] FAR-248: Process filters in LeaveRequest.balanceChangeByAbsenceType --- .../src/leave-absences/shared/models/leave-request.model.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js index a342d3ad154..bf34204f17a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/models/leave-request.model.js @@ -45,11 +45,11 @@ define([ * Get all the total change in balance that is caused by the * leave requests of a given absence type, or of all the absence types of a given contact and period. * - * @param {Object} params + * @param {Object} filters * @return {Promise} Resolves with {Object} Balance Change data */ - balanceChangeByAbsenceType: function (params) { - return leaveRequestAPI.balanceChangeByAbsenceType(params); + balanceChangeByAbsenceType: function (filters) { + return leaveRequestAPI.balanceChangeByAbsenceType(this.processFilters(filters)); }, /** From e958f8ae612e5d49c79cca6c63554e739d378cd0 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 10:57:58 +0200 Subject: [PATCH 097/251] FAR-248: Implement signature change in staffLeaveReport --- contactsummary/js/dist/contact-summary.min.js | 2 +- .../js/angular/dist/absence-tab.min.js | 4 +- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 4 +- .../dist/manager-notification-badge.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 6 +- .../staff-leave-report.component.js | 128 ++++++++++-------- .../staff-leave-report.component.spec.js | 26 ++-- 8 files changed, 94 insertions(+), 80 deletions(-) diff --git a/contactsummary/js/dist/contact-summary.min.js b/contactsummary/js/dist/contact-summary.min.js index 0ac36b30b97..1943db63489 100644 --- a/contactsummary/js/dist/contact-summary.min.js +++ b/contactsummary/js/dist/contact-summary.min.js @@ -1,3 +1,3 @@ define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return n.contact_id&&n.period_id||s.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){ -return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); +return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/contactsummary/js/dist/contact-summary.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 26272e36509..6a75ba9fd2e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} -n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=P(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function R(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function A(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[A(c.statusNames.approved),A(c.statusNames.adminApproved),A(c.statusNames.awaitingApproval),A(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=R(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function R(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function A(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(P).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=P,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&A).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(R).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(P).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?A.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(A.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){A=e})}function T(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function R(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var A=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=P,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return A("approved",{status_id:N(m.statusNames.approved)})}function C(){return n.all([c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,null,!0),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.approved)]),c.balanceChangeByAbsenceType(W.contactId,W.selectedPeriod.id,[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)])]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function P(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),R({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function R(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function A(e,t){return R(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return A("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return A("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return A("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} +n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=P(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function R(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function A(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[A(c.statusNames.approved),A(c.statusNames.adminApproved),A(c.statusNames.awaitingApproval),A(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=R(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function R(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function A(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(P).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=P,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&A).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(R).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(P).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?A.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(A.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){A=e})}function T(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function R(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var A=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=P,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return A("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function P(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),R({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function R(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function A(e,t){return R(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return A("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return A("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return A("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(R)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return R(e).then(function(){O(e,!0)})})}function R(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function A(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),R("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?R("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=P,i.resetUIInputsExtended=A,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function R(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function A(){c.isMode("view")||(D(),T(),R())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=A,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(T)}function R(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function A(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=A();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Ae[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Ae.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Ae.awaiting_approval=e,Ae.more_information_required=e,Ae.rejected=e,Ae.approved=e,Ae.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Re={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Re.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){R(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Re.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),P(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Re,Ae={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){ g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 574e6f80170..49211d7cd46 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return U(e)&&e.then&&e.$$promises}if(!U(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!U(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},U(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||F(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!U(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=U(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=F(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:U(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return D[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return U(n)?e+G(n):(n=t.$eval(n),U(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,U=t.isObject,F=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){E.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function T(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function f(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?m():p()}function m(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),f(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return F[e]}function m(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=w(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){U.push(r.$on("LeaveCalendar::showMonths",M)),U.push(i.subscribe("LeaveRequest::new",c)),U.push(i.subscribe("LeaveRequest::edit",j)),U.push(i.subscribe("LeaveRequest::updatedByManager",j)),U.push(i.subscribe("LeaveRequest::delete",h)),U.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function A(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function w(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function S(){return W.month.loading=!0,a.all([O(),T()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function T(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:R()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){F=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),U.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?A(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&S())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==R().indexOf(e.status_id)&&c(e))}function B(e){return a.all(w(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,U=[],F={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=m,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}), define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){U(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,U("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(F).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(F).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,U("to"))}function U(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function F(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,U("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(D).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function D(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){F.filters.leaveRequest.contact_id=null,F.refresh()}function p(){var e=F.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?F.leaveRequests.filter.list.length:F.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(F.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(F.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(F.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(F.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.filters.leaveRequest.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){F.absenceTypes=e})}function w(e){return(F.isAdmin?r.all(p()):r.leaveManagees(F.contactId,p())).then(function(t){return F.filteredUsers=F.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){F.filters.leaveRequest.leaveStatus!==H&&0===F.leaveRequests.table.list.length&&F.refresh(1,!0)})}function D(){return s.valuesOf("hrjc_department").then(function(e){F.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:F.pagination,r="filter"===e?{return:["status_id"]}:{};return F.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){F.leaveRequests[e]=t}).catch(function(){F.leaveRequests[e].list=[]}).finally(function(){F.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){F.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){F.locations=e})}function T(t){var n=F.filters.leaveRequest;return{contact_id:E(),managed_by:F.isAdmin&&"me"!==n.assignedTo.type?void 0:F.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(F.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){F.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){F.leaveRequestStatuses=e.concat(F.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return F.filteredUsers.length>0&&F.filters.leaveRequest.contact_id?F.filters.leaveRequest.contact_id:{IN:F.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=F.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(F.filters.leaveRequest.leaveStatus=H),(e<=F.totalNoOfPages()||0===F.totalNoOfPages())&&(F.pagination.page=e,w(n))}function j(e){F.filters.leaveRequest.leaveStatus=e,F.refresh(1,!1,"table")}function B(e){F.filters.leaveRequest.assignedTo=e,F.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){F.refresh()}),f.subscribe("LeaveRequest::new",function(){F.refresh()}),f.subscribe("LeaveRequest::edit",function(){F.refresh()}),f.subscribe("LeaveRequest::delete",function(){F.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){F.refresh()})}function U(){return Math.ceil(F.leaveRequests.table.total/F.pagination.size)}t.debug("Component: manage-leave-requests");var F=this,H={name:"all",label:"All"};F.absencePeriods=[],F.absenceTypes=[],F.filteredUsers=[],F.isFilterExpanded=!1,F.isAdmin=!1,F.leaveRequests={table:{list:[]},filter:{list:[]}},F.leaveRequestStatuses=[H],F.loading={content:!0,page:!0,table:!0},F.pagination={page:1,size:7},F.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],F.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:F.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:F.filtersByAssignee[0]}},F.clearStaffSelection=m,F.countLeaveRequestByStatus=h,F.getAbsenceTypeByID=v,F.getArrayOfSize=g,F.getLeaveStatusByValue=b,F.getNavBadge=y,F.getUserNameByID=q,F.labelPeriod=$,F.openLeavePopup=x,F.refresh=k,F.refreshWithFilter=j,F.refreshWithFilterByAssignee=B,F.totalNoOfPages=U,function(){o(i.permissions.admin.administer).then(function(e){F.isAdmin=e,n.all([C(),A(),O(),D(),S(),R(),I()]).then(function(){F.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){T(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){T("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){ -var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),D())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){ +var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),D())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(De.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){ return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 381f8c4ef98..fd1d5c71c0c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return U(e)&&e.then&&e.$$promises}if(!U(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!U(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},U(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||F(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!U(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=U(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=F(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:U(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return U(n)?e+G(n):(n=t.$eval(n),U(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,U=t.isObject,F=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){E.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function T(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function f(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?m():p()}function m(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),f(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return F[e]}function m(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){I(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=w(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){U.push(r.$on("LeaveCalendar::showMonths",M)),U.push(i.subscribe("LeaveRequest::new",c)),U.push(i.subscribe("LeaveRequest::edit",j)),U.push(i.subscribe("LeaveRequest::updatedByManager",j)),U.push(i.subscribe("LeaveRequest::delete",h)),U.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function A(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function w(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function P(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function D(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return W.month.loading=!0,a.all([O(),T()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function T(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:R()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){F=e.indexBy(t,"contact_id")})}function I(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function x(){r.$emit("LeaveCalendar::monthDestroyed"),U.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?A(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&S())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=P(e);t&&(h(t),-1!==R().indexOf(e.status_id)&&c(e))}function B(e){return a.all(w(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,U=[],F={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=x,W.contactsList=m,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}), define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){U(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,U("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(F).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(F).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,U("to"))}function U(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function F(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,U("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function P(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){F.filters.leaveRequest.contact_id=null,F.refresh()}function p(){var e=F.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?F.leaveRequests.filter.list.length:F.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(F.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(F.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(F.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(F.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.filters.leaveRequest.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){F.absenceTypes=e})}function w(e){return(F.isAdmin?r.all(p()):r.leaveManagees(F.contactId,p())).then(function(t){return F.filteredUsers=F.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){F.filters.leaveRequest.leaveStatus!==H&&0===F.leaveRequests.table.list.length&&F.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){F.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:F.pagination,r="filter"===e?{return:["status_id"]}:{};return F.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){F.leaveRequests[e]=t}).catch(function(){F.leaveRequests[e].list=[]}).finally(function(){F.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){F.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){F.locations=e})}function T(t){var n=F.filters.leaveRequest;return{contact_id:E(),managed_by:F.isAdmin&&"me"!==n.assignedTo.type?void 0:F.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(F.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){F.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){F.leaveRequestStatuses=e.concat(F.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return F.filteredUsers.length>0&&F.filters.leaveRequest.contact_id?F.filters.leaveRequest.contact_id:{IN:F.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=F.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(F.filters.leaveRequest.leaveStatus=H),(e<=F.totalNoOfPages()||0===F.totalNoOfPages())&&(F.pagination.page=e,w(n))}function j(e){F.filters.leaveRequest.leaveStatus=e,F.refresh(1,!1,"table")}function B(e){F.filters.leaveRequest.assignedTo=e,F.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){F.refresh()}),f.subscribe("LeaveRequest::new",function(){F.refresh()}),f.subscribe("LeaveRequest::edit",function(){F.refresh()}),f.subscribe("LeaveRequest::delete",function(){F.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){F.refresh()})}function U(){return Math.ceil(F.leaveRequests.table.total/F.pagination.size)}t.debug("Component: manage-leave-requests");var F=this,H={name:"all",label:"All"};F.absencePeriods=[],F.absenceTypes=[],F.filteredUsers=[],F.isFilterExpanded=!1,F.isAdmin=!1,F.leaveRequests={table:{list:[]},filter:{list:[]}},F.leaveRequestStatuses=[H],F.loading={content:!0,page:!0,table:!0},F.pagination={page:1,size:7},F.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],F.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:F.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:F.filtersByAssignee[0]}},F.clearStaffSelection=m,F.countLeaveRequestByStatus=h,F.getAbsenceTypeByID=v,F.getArrayOfSize=g,F.getLeaveStatusByValue=b,F.getNavBadge=y,F.getUserNameByID=q,F.labelPeriod=$,F.openLeavePopup=x,F.refresh=k,F.refreshWithFilter=j,F.refreshWithFilterByAssignee=B,F.totalNoOfPages=U,function(){o(i.permissions.admin.administer).then(function(e){F.isAdmin=e,n.all([C(),A(),O(),P(),S(),R(),I()]).then(function(){F.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){T(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){T("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}), -define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){ -t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=U.from_date!==u.request.from_date||U.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function T(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),F?F=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){U=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var U,F=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||R())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==U())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=U();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function U(){return Le.request?Le.request.request_type:Le.leaveType||null}function F(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=U(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=T,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=F,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){ +return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js index 98394b924bf..a1f2eb25dd0 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js @@ -1,2 +1,2 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return t.contact_id&&t.period_id||s.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(e)},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-notification-badge.component",["leave-absences/shared/modules/components"],function(e){function n(e,n,t){function a(){return t.all(i.filters,null,null,null,!1).then(function(e){i.count=e.list.length})}function s(){n.subscribe(i.refreshCountEventName,a)}e.debug("Component: leave-notification-badge");var i=this;i.count=0,function(){s(),a()}()}e.component("leaveNotificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-notification-badge.html"}],controllerAs:"badge",controller:n}),n.$inject=["$log","pubSub","LeaveRequest"]}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){u.managed_by=e.contactId})}function c(){return r().then(function(n){u.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u={},l=this;l.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){l.filters=u})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/shared/components/leave-notification-badge.component","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","leave-absences.settings","leave-absences.models","leave-absences.components","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return t.contact_id&&t.period_id||s.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-notification-badge.component",["leave-absences/shared/modules/components"],function(e){function n(e,n,t){function a(){return t.all(i.filters,null,null,null,!1).then(function(e){i.count=e.list.length})}function s(){n.subscribe(i.refreshCountEventName,a)}e.debug("Component: leave-notification-badge");var i=this;i.count=0,function(){s(),a()}()}e.component("leaveNotificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-notification-badge.html"}],controllerAs:"badge",controller:n}),n.$inject=["$log","pubSub","LeaveRequest"]}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){u.managed_by=e.contactId})}function c(){return r().then(function(n){u.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u={},l=this;l.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){l.filters=u})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/shared/components/leave-notification-badge.component","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","leave-absences.settings","leave-absences.models","leave-absences.components","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 89510fd4392..ae1798812ba 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(e)},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ -e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){return n.all([u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,null,!0),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.approved)]),u.balanceChangeByAbsenceType(H.contactId,H.selectedPeriod.id,[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)])]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){ -H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +;return!0===t?0===f(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ +e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){var t={contact_id:H.contactId,period_id:H.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}}))]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)}) +}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js index e008e89e071..40b54e06fba 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js @@ -22,8 +22,8 @@ define([ }); function controller ($log, $q, $rootScope, checkPermissions, AbsencePeriod, - AbsenceType, Entitlement, LeaveRequest, OptionGroup, pubSub, - HRSettings, sharedSettings) { + AbsenceType, Entitlement, LeaveRequest, OptionGroup, pubSub, + HRSettings, sharedSettings) { $log.debug('Component: staff-leave-report'); var statusUpdateHandlers = { @@ -63,18 +63,18 @@ define([ loadAbsenceTypes(), loadAbsencePeriods() ]) - .then(function () { - vm.loading.page = false; - }) - .then(function () { - return $q.all([ - loadEntitlements(), - loadBalanceChanges() - ]); - }) - .then(function () { - vm.loading.content = false; - }); + .then(function () { + vm.loading.page = false; + }) + .then(function () { + return $q.all([ + loadEntitlements(), + loadBalanceChanges() + ]); + }) + .then(function () { + vm.loading.content = false; + }); registerEvents(); })(); @@ -200,25 +200,35 @@ define([ * @return {Promise} */ function loadBalanceChanges () { + var basicParams = { contact_id: vm.contactId, period_id: vm.selectedPeriod.id }; + return $q.all([ - LeaveRequest.balanceChangeByAbsenceType(vm.contactId, vm.selectedPeriod.id, null, true), - LeaveRequest.balanceChangeByAbsenceType(vm.contactId, vm.selectedPeriod.id, [ - valueOfRequestStatus(sharedSettings.statusNames.approved) - ]), - LeaveRequest.balanceChangeByAbsenceType(vm.contactId, vm.selectedPeriod.id, [ - valueOfRequestStatus(sharedSettings.statusNames.awaitingApproval), - valueOfRequestStatus(sharedSettings.statusNames.moreInformationRequired) - ]) + LeaveRequest.balanceChangeByAbsenceType(_.assign({}, basicParams, { + public_holiday: true + })), + LeaveRequest.balanceChangeByAbsenceType(_.assign({}, basicParams, { + statuses: { + in: [ valueOfRequestStatus(sharedSettings.statusNames.approved) ] + } + })), + LeaveRequest.balanceChangeByAbsenceType(_.assign({}, basicParams, { + statuses: { + in: [ + valueOfRequestStatus(sharedSettings.statusNames.awaitingApproval), + valueOfRequestStatus(sharedSettings.statusNames.moreInformationRequired) + ] + } + })) ]) - .then(function (results) { - vm.absenceTypes.forEach(function (absenceType) { - absenceType.balanceChanges = { - holidays: results[0][absenceType.id], - approved: results[1][absenceType.id], - pending: results[2][absenceType.id] - }; + .then(function (results) { + vm.absenceTypes.forEach(function (absenceType) { + absenceType.balanceChanges = { + holidays: results[0][absenceType.id], + approved: results[1][absenceType.id], + pending: results[2][absenceType.id] + }; + }); }); - }); } /** @@ -234,24 +244,24 @@ define([ contact_id: vm.contactId, period_id: vm.selectedPeriod.id }, true) - .then(function (entitlements) { - vm.entitlements = entitlements; - }) - .then(function () { - vm.absenceTypesFiltered = vm.absenceTypes.filter(function (absenceType) { - var entitlement = _.find(vm.entitlements, function (entitlement) { - return entitlement.type_id === absenceType.id; - }); + .then(function (entitlements) { + vm.entitlements = entitlements; + }) + .then(function () { + vm.absenceTypesFiltered = vm.absenceTypes.filter(function (absenceType) { + var entitlement = _.find(vm.entitlements, function (entitlement) { + return entitlement.type_id === absenceType.id; + }); - // set entitlement to 0 if no entitlement is present - absenceType.entitlement = entitlement ? entitlement.value : 0; - absenceType.remainder = entitlement ? entitlement.remainder : { current: 0, future: 0 }; + // set entitlement to 0 if no entitlement is present + absenceType.entitlement = entitlement ? entitlement.value : 0; + absenceType.remainder = entitlement ? entitlement.remainder : { current: 0, future: 0 }; - return !((absenceType.entitlement === 0) && + return !((absenceType.entitlement === 0) && (absenceType.allow_overuse !== '1') && (absenceType.allow_accruals_request !== '1')); + }); }); - }); } /** @@ -264,12 +274,12 @@ define([ contact_id: vm.contactId, period_id: vm.selectedPeriod.id }, vm.entitlements) - .then(function () { - return processBreakdownsList(vm.entitlements); - }) - .then(function (breakdownListFlatten) { - vm.sections.entitlements.data = breakdownListFlatten; - }); + .then(function () { + return processBreakdownsList(vm.entitlements); + }) + .then(function (breakdownListFlatten) { + vm.sections.entitlements.data = breakdownListFlatten; + }); } /** @@ -372,7 +382,7 @@ define([ status_id: { in: [ valueOfRequestStatus(sharedSettings.statusNames.awaitingApproval), valueOfRequestStatus(sharedSettings.statusNames.moreInformationRequired) - ] }, + ] } }); } @@ -527,15 +537,15 @@ define([ loadEntitlements(), loadBalanceChanges() ]) - .then(function () { - vm.loading.content = false; - }) - .then(function () { - return $q.all([ - loadOpenSectionsData(), - clearSectionsData() - ]); - }); + .then(function () { + vm.loading.content = false; + }) + .then(function () { + return $q.all([ + loadOpenSectionsData(), + clearSectionsData() + ]); + }); } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js index 7b22aca183c..a5813f41d57 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js @@ -242,16 +242,17 @@ }); it('has fetched the balance changes for the current contact and selected period', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(0); + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(0)[0]; - expect(args[0]).toEqual(contactId); - expect(args[1]).toEqual(controller.selectedPeriod.id); + expect(args.contact_id).toEqual(contactId); + expect(args.period_id).toEqual(controller.selectedPeriod.id); }); describe('public holidays', function () { it('has fetched the balance changes for the public holidays', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(0); - expect(args[3]).toEqual(true); + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(0)[0]; + + expect(args.public_holiday).toEqual(true); }); it('has stored them in each absence type', function () { @@ -266,8 +267,11 @@ describe('approved requests', function () { it('has fetched the balance changes for the approved requests', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(1); - expect(args[2]).toEqual([ valueOfRequestStatus(sharedSettings.statusNames.approved) ]); + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(1)[0]; + + expect(args.statuses.in).toEqual([ + valueOfRequestStatus(sharedSettings.statusNames.approved) + ]); }); it('has stored them in each absence type', function () { @@ -282,9 +286,9 @@ describe('open requests', function () { it('has fetched the balance changes for the open requests', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(2); + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(2)[0]; - expect(args[2]).toEqual([ + expect(args.statuses.in).toEqual([ valueOfRequestStatus(sharedSettings.statusNames.awaitingApproval), valueOfRequestStatus(sharedSettings.statusNames.moreInformationRequired) ]); @@ -364,10 +368,10 @@ }); it('reloads all the balance changes', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(_.random(0, 2)); + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(_.random(0, 2))[0]; expect(LeaveRequest.balanceChangeByAbsenceType).toHaveBeenCalledTimes(3); - expect(args[1]).toEqual(newPeriod.id); + expect(args.period_id).toEqual(newPeriod.id); }); }); From 4d4112d8b7f56b6aea850500f9a9ad75bc4ffd57 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 11:07:38 +0200 Subject: [PATCH 098/251] FAR-248: Fetch balance changes by absence type for expired section --- .../js/angular/dist/absence-tab.min.js | 6 ++--- .../js/angular/dist/my-leave.min.js | 4 ++-- .../staff-leave-report.component.js | 8 +++++-- .../staff-leave-report.component.spec.js | 23 ++++++++++++++++--- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 6a75ba9fd2e..2a4434dd9e3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function R(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function A(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(P).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=A,function(){O().then(p).then(v).then(P).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} -n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=P(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function R(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function A(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[A(c.statusNames.approved),A(c.statusNames.adminApproved),A(c.statusNames.awaitingApproval),A(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=R(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function R(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function A(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(P).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=P,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&A).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(R).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(P).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?A.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(A.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){A=e})}function T(e){return!e.attachment_id||O.canManage}function P(){e.forEach(I,function(e){e()})}function R(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var A=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=P,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return A("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function P(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),R({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function R(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function A(e,t){return R(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return A("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return A("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return A("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", -controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(R)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function P(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return R(e).then(function(){O(e,!0)})})}function R(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function A(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),R("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?R("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=P,i.resetUIInputsExtended=A,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function R(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function A(){c.isMode("view")||(D(),T(),R())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=A,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(T)}function R(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function A(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=A();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Ae[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Ae.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Ae.awaiting_approval=e,Ae.more_information_required=e,Ae.rejected=e,Ae.approved=e,Ae.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Re={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Re.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){R(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Re.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),P(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Re,Ae={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){ +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} +n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function T(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function A(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function P(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return P(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return R("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return R("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return R("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", +controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function A(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(D(),T(),P())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(T)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){ g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index ae1798812ba..92322763101 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ -e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){var t={contact_id:H.contactId,period_id:H.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}}))]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],approved:e[1][t.id],pending:e[2][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)}) -}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){var t={contact_id:H.contactId,period_id:H.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}}))]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({ +expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js index 40b54e06fba..8d421a610ef 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js @@ -206,6 +206,9 @@ define([ LeaveRequest.balanceChangeByAbsenceType(_.assign({}, basicParams, { public_holiday: true })), + LeaveRequest.balanceChangeByAbsenceType(_.assign({}, basicParams, { + expired: true + })), LeaveRequest.balanceChangeByAbsenceType(_.assign({}, basicParams, { statuses: { in: [ valueOfRequestStatus(sharedSettings.statusNames.approved) ] @@ -224,8 +227,9 @@ define([ vm.absenceTypes.forEach(function (absenceType) { absenceType.balanceChanges = { holidays: results[0][absenceType.id], - approved: results[1][absenceType.id], - pending: results[2][absenceType.id] + expired: results[1][absenceType.id], + approved: results[2][absenceType.id], + pending: results[3][absenceType.id] }; }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js index a5813f41d57..2416eba64d2 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/staff-leave-report.component.spec.js @@ -265,9 +265,26 @@ }); }); + describe('expired requests', function () { + it('has fetched the balance changes for the expired requests', function () { + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(1)[0]; + + expect(args.expired).toEqual(true); + }); + + it('has stored them in each absence type', function () { + _.forEach(controller.absenceTypes, function (absenceType) { + var balanceChanges = absenceType.balanceChanges.expired; + + expect(balanceChanges).toBeDefined(); + expect(balanceChanges).toBe(mockData[absenceType.id]); + }); + }); + }); + describe('approved requests', function () { it('has fetched the balance changes for the approved requests', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(1)[0]; + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(2)[0]; expect(args.statuses.in).toEqual([ valueOfRequestStatus(sharedSettings.statusNames.approved) @@ -286,7 +303,7 @@ describe('open requests', function () { it('has fetched the balance changes for the open requests', function () { - var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(2)[0]; + var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(3)[0]; expect(args.statuses.in).toEqual([ valueOfRequestStatus(sharedSettings.statusNames.awaitingApproval), @@ -370,7 +387,7 @@ it('reloads all the balance changes', function () { var args = LeaveRequest.balanceChangeByAbsenceType.calls.argsFor(_.random(0, 2))[0]; - expect(LeaveRequest.balanceChangeByAbsenceType).toHaveBeenCalledTimes(3); + expect(LeaveRequest.balanceChangeByAbsenceType).toHaveBeenCalledTimes(4); expect(args.period_id).toEqual(newPeriod.id); }); }); From c16faa031ae2267a526016e2afac3fc49d838c0e Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 14:49:05 +0200 Subject: [PATCH 099/251] FAR-248: Add missing data to expired toils objects --- .../js/angular/dist/absence-tab.min.js | 6 +++--- .../js/angular/dist/my-leave.min.js | 2 +- .../shared/components/staff-leave-report.component.js | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 2a4434dd9e3..c77ef5ae422 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} -n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function T(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function A(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function P(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return P(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return R("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return R("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return R("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report", -controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function A(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(D(),T(),P())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(T)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){ -g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function T(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function A(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function P(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return P(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return R("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return R("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return R("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{type_id:e.type_id,expiry_date:e.toil_expiry_date,amount:e.toil_to_accrue,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}], +controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function A(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(D(),T(),P())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(T)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){ +return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 92322763101..c8ec91ce4c4 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){var t={contact_id:H.contactId,period_id:H.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}}))]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({ -expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{expiry_date:e.toil_expiry_date,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{type_id:e.type_id,expiry_date:e.toil_expiry_date,amount:e.toil_to_accrue,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js index 8d421a610ef..ace9efcbe0e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js @@ -471,7 +471,9 @@ define([ .then(function () { return list.map(function (listEntry) { return { + 'type_id': listEntry.type_id, 'expiry_date': listEntry.toil_expiry_date, + 'amount': listEntry.toil_to_accrue, 'type': { 'label': 'Accrued TOIL' } From 327c64fc2c9c9786d879f1ae6342450962bc06a6 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 15:03:54 +0200 Subject: [PATCH 100/251] FAR-248: Refactor processExpiredTOILS() --- .../js/angular/dist/absence-tab.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../staff-leave-report.component.js | 23 ++++++++++--------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index c77ef5ae422..f2c6b4ecb67 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} -n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function T(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function A(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function P(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return P(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return R("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return R("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return R("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(e){return n.resolve().then(function(){return e.map(function(e){return{type_id:e.type_id,expiry_date:e.toil_expiry_date,amount:e.toil_to_accrue,type:{label:"Accrued TOIL"}}})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}], +n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function T(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function A(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function P(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return P(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return R("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return R("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return R("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}], controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function A(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(D(),T(),P())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(T)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){ return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index c8ec91ce4c4..4792484fb9c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){var t={contact_id:H.contactId,period_id:H.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}}))]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({ -expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(e){return n.resolve().then(function(){return e.map(function(e){return{type_id:e.type_id,expiry_date:e.toil_expiry_date,amount:e.toil_to_accrue,type:{label:"Accrued TOIL"}}})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js index ace9efcbe0e..3f27756c5fd 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js @@ -461,23 +461,24 @@ define([ } /** - * Process each expired TOIL requests + * Process each expired TOIL request, so that they have the same + * key properties that an entitlement breakdown object has, given that + * they need to be listed in the same section * - * @param {Array} list of expired TOIL request - * @return {Promise} resolves to the flatten list + * @param {Array} toils + * @return {Promise} resolves to {Array} */ - function processExpiredTOILS (list) { + function processExpiredTOILS (toils) { return $q.resolve() .then(function () { - return list.map(function (listEntry) { - return { - 'type_id': listEntry.type_id, - 'expiry_date': listEntry.toil_expiry_date, - 'amount': listEntry.toil_to_accrue, - 'type': { + return toils.map(function (toil) { + return _.assign({}, toil, { + expiry_date: toil.toil_expiry_date, + amount: toil.toil_to_accrue, + type: { 'label': 'Accrued TOIL' } - }; + }); }); }); } From 087120dab0efc789e15c5adfd11d0eaf995828fe Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Wed, 2 May 2018 15:34:43 +0200 Subject: [PATCH 101/251] FAR-248: Isolate the absence type process logic --- .../js/angular/dist/absence-tab.min.js | 8 +-- .../js/angular/dist/my-leave.min.js | 4 +- .../staff-leave-report.component.js | 61 +++++++++++++------ 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index f2c6b4ecb67..896045115d7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function D(){return l.all()}function T(){return o.all([_(),D(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),T()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} -n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function D(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?T(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=D[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(D,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:D[e].label,isDirectAction:D[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,D={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function D(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function T(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():T()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=D(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(D(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(D(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=D,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function D(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function T(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=T,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([D(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){E(e),W.sections.other.open&&f(e,W.sections.other)}function h(){Object.values(W.sections).forEach(function(e){e.data=[]})}function v(e){var t=j[e.status];t?t(e.leaveRequest):W.refresh()}function b(t){t.dataIndex=e.indexBy(t.data,"id")}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return s.all().then(function(t){W.absencePeriods=e.sortBy(t,"start_date"),W.selectedPeriod=e.find(W.absencePeriods,function(e){return!0===e.current})})}function y(){return i.all().then(i.loadCalculationUnits).then(function(t){W.absenceTypes=t,W.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return R("approved",{status_id:N(m.statusNames.approved)})}function C(){var t={contact_id:W.contactId,period_id:W.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}}))]).then(function(e){W.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function D(){return r.all({contact_id:W.contactId,period_id:W.selectedPeriod.id},!0).then(function(e){W.entitlements=e}).then(function(){W.absenceTypesFiltered=W.absenceTypes.filter(function(t){var n=e.find(W.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function T(){return r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id},W.entitlements).then(function(){return M(W.entitlements)}).then(function(e){W.sections.entitlements.data=e})}function A(){return n.all([r.breakdown({contact_id:W.contactId,period_id:W.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:M(e[0]),expiredTOILS:x(e[1].list)})}).then(function(t){W.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),W.sections.expired.data=e.sortBy(W.sections.expired.data,"expiry_date")})}function P(t){return c.all(e.assign({contact_id:W.contactId,from_date:{from:W.selectedPeriod.start_date},to_date:{to:W.selectedPeriod.end_date},type_id:{IN:W.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return P(t).then(function(t){W.sections[e].data=t.list})}function I(){return n.all(Object.values(W.sections).filter(function(e){return e.open}).map(k))}function w(){return R("other",{status_id:{in:[N(m.statusNames.rejected),N(m.statusNames.cancelled)]}})}function O(){return R("pending",{status_id:{in:[N(m.statusNames.awaitingApproval),N(m.statusNames.moreInformationRequired)]}})}function S(){return R("holidays",{public_holiday:!0})}function k(e){return e.loading=!0,e.loadLeaveRequests().then(b.bind(this,e)).then(function(){e.loading=!1})}function L(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){W.leaveRequestStatuses=e.indexBy(t,"value")})}function M(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(W.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function x(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function $(){l.subscribe("LeaveRequest::new",function(){W.refresh()}),l.subscribe("LeaveRequest::edit",function(){W.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){E(e)})}function E(t){e.forEach(W.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],B(t,a))})}function B(e,t){var n=W.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){W.loading.content=!0,n.all([D(),C()]).then(function(){W.loading.content=!1}).then(function(){return n.all([I(),h()])})}function F(e){var t=W.sections[e];t.open=!t.open,t.open&&!t.data.length&&k(t)}function N(t){return e.find(W.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var j={delete:E,cancel:p},W=this;W.absencePeriods=[],W.absenceTypes=[],W.absenceTypesFiltered=[],W.absenceTypesIndexed={},W.dateFormat=d.DATE_FORMAT,W.leaveRequestStatuses={},W.selectedPeriod=null,W.role="absence-tab"===a.section?"admin":"staff",W.loading={content:!0,page:!0},W.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w}},W.labelPeriod=g,W.refresh=U,W.toggleSection=F,function(){n.all([L(),y(),_()]).then(function(){W.loading.page=!1}).then(function(){return n.all([D(),C()])}).then(function(){W.loading.content=!1}),$()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}], -controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return T(i.uiOptions.fromDate,"from").then(function(){return T(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),D(e)})}function D(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function T(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function A(e){return T(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function D(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function T(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(D(),T(),P())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,D){function T(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(T)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return D.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",De),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function De(){Oe.forEach(function(e){e()})}function Te(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Te,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){ -return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){D.absencePeriods=t.chain(D.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){D.absenceTypes=t.filter(D.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:D.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:D.contactId,returnUrl:n})}function h(){return c.all().then(function(e){D.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:D.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=D.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){D.absencePeriods=t.map(D.absencePeriods,function(e){var n=t.map(D.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],D=this;D.absencePeriods=[],D.loading={absencePeriods:!0},D.getEditEntitlementsPageURL=p,D.openAnnualEntitlementChangeLog=g,D.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){D.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,o){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:t(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,o,s,i){return t.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return s.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,o,s){return t.debug("WorkPatternAPI.getCalendar",n,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,o){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,o,s,i){function r(t,n){return u().then(function(a){var o=this.days[c(t).valueOf()];return!!o&&e.find(a,function(e){return e.name===n}).value===o.type}.bind(this))}function c(e){return t(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[c(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,o){return t.debug("Calendar"),n.extend({get:function(n,s,i,r){return t.debug("Calendar.get"),a.getCalendar(n,s,i,r).then(function(t){var a=t.values.map(function(e){return o.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function o(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,o,s){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return o.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",t,n,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return n.contact_id&&n.period_id||o.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?o.reject(t(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(t){return s.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,o&&(i.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return r.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),n.all(t)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(s.permissions.admin.administer).then(function(t){return t?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,o,s,i){return n.all(this.processFilters(e),t,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,t){return e.debug("WorkPatternInstance"),t.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,t){"use strict";t.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(t,n,a,o){return t.debug("WorkPattern"),n.extend({assignWorkPattern:function(e,t,n,o,s,i){return a.assignWorkPattern(e,t,n,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(t){return o.init(e.first(t),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,t,n){return a.workPatternsOf(e,t,n).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,o,s,i,r){function c(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return t.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],t=n(M.selectedPeriod.start_date).clone().startOf("month"),a=n(M.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(t,n){null===n||e.equals(t,n)||I()})}function h(e){M.injectMonths=!0,S("injected").then(function(){I(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+t.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=t.sortBy(e,"start_date"),M.selectedPeriod=t.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(w)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function T(){return l.all()}function D(){return o.all([_(),T(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=t.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function I(e){var n=M.selectedMonths.length?M.months.filter(function(e){return t.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",n,!!e)}function w(){M.selectedMonths=[n().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(n){var a=0,o=i.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===M.months.length&&(o(),n())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),D()])}).then(function(){return M.showFilters?C():t.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,o){"use strict";function s(){y.calculationUnit=i(y.supportData.calculationUnits,"value",b.calculation_unit)}function i(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function r(){var e,n;return n=t(y.contactData.leaveRequest.from_date).isSame(y.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+y.calculationUnit.name+"-on-"+e+"-tooltip"}function c(){b=i(y.supportData.absenceTypes,"id",y.contactData.leaveRequest.type_id),y.contactData.leaveRequest["type_id.title"]=b.title}function u(){"days"===y.calculationUnit.name&&(g=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.from_date_type),_=i(y.supportData.dayTypes,"value",y.contactData.leaveRequest.to_date_type),y.contactData.leaveRequest["from_date_type.label"]=g.label,y.contactData.leaveRequest["to_date_type.label"]=_.label)}function l(e,t,n,a,s){e.stopPropagation(),o.openModal(t,n,a,s)}function d(){y.dates.from=new Date(y.contactData.leaveRequest.from_date),y.dates.to=new Date(y.contactData.leaveRequest.to_date)}function m(){y.contactData.isAccruedTOIL?y.label="AT":"days"===y.calculationUnit.name?f():p()}function f(){y.label=y.contactData.isAM?"AM":y.contactData.isPM?"PM":""}function p(){var e=t(y.contactData.leaveRequest.from_date).isSame(y.date,"day"),n=t(y.contactData.leaveRequest.to_date).isSame(y.date,"day");y.label=e?t(y.contactData.leaveRequest.from_date).format("HH:mm"):n?t(y.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){y.tooltipTemplate=y.contactData.isAccruedTOIL?"accrued-toil-tooltip":r()}function v(){a.$watch("day.contactData.leaveRequest",function(){y.contactData&&y.contactData.leaveRequest&&(c(),s(),u(),m(),d(),h())})} +n.debug("Component: leave-calendar-day");var b,g,_,y=this;y.calculationUnit="",y.dates={from:null,to:null},y.label="",y.tooltipTemplate=null,y.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(e){_([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),o=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(H.period.start_date)&&o.isSameOrBefore(H.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return j[e]}function f(){return H.showOnlyWithLeaveRequests?H.contacts.filter(function(e){return Object.keys(W[e.id]||{}).length}):H.contacts}function p(e){return t(e,c.serverDateFormat)}function h(e){k(e),U(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function b(){return H.contactIdsToReduceTo&&(H.contacts=H.contacts.filter(function(t){return e.includes(H.contactIdsToReduceTo,t.contact_id)||e.find(W,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function g(){H.supportData.dayTypes=e.indexBy(H.supportData.dayTypes,"name"),H.supportData.leaveRequestStatuses=e.indexBy(H.supportData.leaveRequestStatuses,"value"),H.supportData.publicHolidays=e.transform(H.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function _(e){return e.forEach(function(e){var t=A(e);W[e.contact_id]=W[e.contact_id]||{},t.forEach(function(t){W[e.contact_id][t.date]=e})}),a.resolve()}function y(){N.push(o.$on("LeaveCalendar::showMonths",$)),N.push(r.subscribe("LeaveRequest::new",u)),N.push(r.subscribe("LeaveRequest::edit",B)),N.push(r.subscribe("LeaveRequest::updatedByManager",B)),N.push(r.subscribe("LeaveRequest::delete",h)),N.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):B(e.leaveRequest)}))}function q(e,n,a){var o=H.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?o.value===n.from_date_type:t(a).isSame(n.to_date,"day")?o.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function T(e){return!!H.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=H.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],o=t(n.from_date).clone(),s=t(n.to_date);o.isSameOrBefore(s);)o.month()===H.month.index&&o.year()===H.month.year&&a.push(e.find(H.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function P(t){return e.find(W[t.contact_id],function(e){return t.id===e.id})}function R(t){var n=e.find(H.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function I(){return[R(c.statusNames.approved),R(c.statusNames.adminApproved),R(c.statusNames.awaitingApproval),R(c.statusNames.moreInformationRequired)]}function w(){return H.month.loading=!0,a.all([S(),O()]).then(b).then(x).then(function(){F=!0}).then(function(){H.month.loading=!1})}function O(){return i.all({from_date:{to:H.month.days[H.month.days.length-1].date},to_date:{from:H.month.days[0].date},status_id:{IN:I()},contact_id:{IN:H.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(H.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return _(e.list)})}function S(){var t=H.month.days[0].date,n=H.month.days[H.month.days.length-1].date;return s.get(H.contacts.map(function(e){return e.id}),t,n).then(function(t){j=e.indexBy(t,"contact_id")})}function k(t){W[t.contact_id]=e.omit(W[t.contact_id],function(e){return e.id===t.id})}function L(){o.$emit("LeaveCalendar::monthDestroyed"),N.map(function(e){e.remove?e.remove():e()})}function M(t,n,o){var s,i;return t.contactsData[n]=t.contactsData[n]||{},i=m(n),s=!0===o?a.resolve():a.all([i.isWeekend(p(t.date)),i.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),s.then(function(){return W[n]?W[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?E(a):null,isAccruedTOIL:a?C(a,"toil"):null,isRequested:a?D(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function x(){return a.all(H.month.days.map(function(e){return a.all(H.contacts.map(function(t){return M(e,t.id)}))}))}function $(t,n,a){!e.find(n,function(e){return e.index===H.month.index})?H.visible=!1:(H.currentPage=0,H.visible=!0,(a||!F)&&w())}function E(t){var n=e.find(H.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function B(e){var t=P(e);t&&(h(t),-1!==I().indexOf(e.status_id)&&u(e))}function U(e){return a.all(A(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var F=!1,N=[],j={},W={},H=this;H.currentPage=0,H.pageSize=20,H.visible=!1,H.showContactName=!!H.showContactName,H.showOnlyWithLeaveRequests=!!H.showOnlyWithLeaveRequests,H.$onDestroy=L,H.contactsList=f,H.getContactUrl=v,function(){var e=t().month(H.month.index).year(H.month.year);g(),y(),H.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function o(){var t=n.defer();return a.open(e.defaults(s(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,o,s,i,r,c,u){function l(t){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?o.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([C.awaitingApproval,C.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=T[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,t,n,a,o){e.stopPropagation(),s.openModal(t,n,a,o)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===n&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(T,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&_(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return r.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,c.serverDateFormat).toDate()}function h(e){return t(e).format(c.serverDateFormat)}function v(e){var t;return i.resolve().then(function(){N(e),"from"===e&&F(),S("hours")&&(_(e),"from"!==e||te.uiOptions.multipleDays||_("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(t)return x()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(V(),!t)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return te.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(te.setDaysSelectionModeExtended).then(y).then(!te.uiOptions.multipleDays&&E)}function _(e){te.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,S("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return te.request?te.request.request_type:te.leaveType||null}function T(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function D(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(t){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?E():D()}function R(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){J(t)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){te.isMode("edit")&&(te.isLeaveStatus(c.statusNames.approved)||te.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function O(){o.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(K(e),V()))})}function S(e){return te.selectedAbsenceType.calculation_unit_name===e}function k(e){return te.request.request_type===e}function L(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function x(){return u.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function $(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function E(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(j).catch(A).finally(function(){te.loading.balanceChange=!1})):i.resolve()}function B(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function U(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),V(),z()}function j(e){te.balance.change=e,te.request.balance_change=e.amount,f(),B(),te.loading.balanceChange=!1}function W(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function H(){return!te.isMode("create")&&U()||te.isMode("create")&&(k("sickness")||S("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,i.resolve().then(te.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function V(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(S("hours")||k("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var t=T(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(T(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(T(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=c.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:$},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=_,te.getMomentDateWithGivenTime=T,te.handleError=A,te.isCalculationUnit=S,te.isLeaveType=k,te.isNotWorkingDay=L,te.performBalanceChangeCalculation=E,te.setRequestDateTimesAndDateTypes=V,te.updateEndTimeInputMinTime=K,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(C(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",te),I(),te.initChildController().then(function(){return i.all([x(),M()])}).then(!te.isMode("create")&&R).then(H).then(function(){if(!te.isMode("create"))return i.resolve().then(te.initTimesExtended).then(V)}).then(!te.isMode("create")&&W).then(w).then(G).then(P).then(O).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){w[e.label]=t})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function D(e){return!e.attachment_id||O.canManage}function A(){e.forEach(I,function(e){e()})}function P(e,t){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=D,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([T(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,o){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=n.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,o,s,i,r,c,u,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=G[e.status];t?t(e.leaveRequest):Y.refresh()}function _(t){t.dataIndex=e.indexBy(t.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function D(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([c.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return E(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function R(){return n.all([r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function I(t){return c.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function w(e,t){return I(t).then(function(t){Y.sections[e].data=t.list})}function O(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(M))}function S(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function k(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function L(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function $(){p(),b()}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function U(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],N(t,a))})}function N(e,t){var n=Y.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function j(){Y.loading.content=!0,n.all([A(),D()]).then($).then(function(){Y.loading.content=!1}).then(function(){return n.all([O(),v()])})}function W(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&M(t)}function H(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var G={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:k},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S}},Y.labelPeriod=y,Y.refresh=j,Y.toggleSection=W,function(){n.all([x(),C(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),D()])}).then($).then(function(){Y.loading.content=!1}),U()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"}, +templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,t=!!e.from_date&&!!e.to_date,n=i.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return i.canCalculateChange()}function m(t,n){var a=i.uiOptions.times[t],o=e.clone(n.time_from),s=e.clone(n.time_to);i.uiOptions.multipleDays||("from"===t&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=i.convertDateToServerFormat(t),v(t).then(function(n){return n?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,i.requestDayTypes).then(function(t){return t.length?t:i.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return I(n,e),e})):o.reject([])}function p(e,n){return e=t(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return D(i.uiOptions.fromDate,"from").then(function(){return D(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,t){i.isCalculationUnit("days")||+e==+t||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var n=t(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),i.uiOptions.times[e].time=n}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],t=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),t[e].amount=Math.min(i.request[e+"_date_amount"],t[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(t,n){i.isCalculationUnit("days")||t===n||(i.setRequestDateTimesAndDateTypes(),t&&O(e,!0))})}function D(e,t){return f(e,t).then(function(){i.loading[t+"DayTypes"]=!1})}function A(e){return D(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var t=i.uiOptions[e+"Date"],n=!i.uiOptions.multipleDays;return t?i.request.getWorkDayForDate(i.convertDateToServerFormat(t)).then(function(t){L[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return L[e]={},i.handleError(t)}).finally(function(){n&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(t){var n=i.uiOptions.times[t];i["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function I(t,n){var a="request"+e.startCase(t)+"DayTypes";i[a]=n,i.isMode("create")&&(i.request[t+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,t){var n=i.uiOptions,a=n.multipleDays?e:"from",o=n.times[a],s=n.multipleDays&&"to"===a?o.min:n.times.from.time,r=n.multipleDays&&"from"===a?o.max:n.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,t&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(t){var n=r.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(t){return i.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){r.sicknessReasons=e.indexBy(t,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=t.duration(t(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,t=!c.uiOptions.multipleDays&&!!c.request.from_date,n=t||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&n&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,t=c.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,t=W.hasPreviousExpirationDate,n=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=n&&(a||e||t)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,t){+e!=+t&&c.performBalanceChangeCalculation()})}function D(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=t(c.request.from_date).format("HH:mm"),e.to.time=t(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,t){e!==t&&(c.setRequestDateTimesAndDateTypes(),U(),l(),L())})})}function R(){c.isMode("view")||(T(),D(),P())}function I(t){return i.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){c.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function w(){return l(),L(),U()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),U()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function U(){return f()?d().catch(a.resolve):a.resolve()}function F(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=F,function(){M(),x(),B(),!c.isMode("create")&&_()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),o=t(e,n);return t(this.start_date).isSameOrBefore(o)&&t(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,o,s){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=t().format(s.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,o,s){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var o=e(n).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function o(t,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function D(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(D)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function U(){return F(xe.getStatusFromValue(xe.request.status_id).name)}function F(e){return n.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?U():F("none")}function W(e){return n.find(xe.requestStatuses,function(t){return t.value===e})}function H(e){xe.errors=n.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:n.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,t){H(t)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function Q(){var e,t;xe.request=xe.leaveRequest||null,e=N(),t=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(t):"sickness"===e?xe.request=q.init(t):"toil"===e&&(xe.request=C.init(t))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!n.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function te(e){var t=xe.getStatusFromValue(xe.request.status_id);return!!t&&t.name===e}function ne(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,t){var n=a(e.from_date),o=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&o.isSameOrBefore(t.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=n.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=n.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=n.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(t){xe.request.status_id=e,t&&H(t)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&n.push(e),++a===Ie&&(n.length>0?t.reject(n):t.resolve())}var t=o.defer(),n=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Te(){Oe.forEach(function(e){e()})}function De(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=n.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=te,xe.isLeaveType=ne,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=De,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,o,s,i,r,c){function u(e){return r.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,o,i,r){a.open({appendTo:t.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(t){function n(t,n,a){t.debug("Component: absence-tab-container"),n.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}t.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:n}),n.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,t){function n(e,t,n){function a(){return n.all().then(n.loadCalculationUnits).then(function(e){o.absenceTypes=e})}t.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}t.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:n}),n.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,t){function n(t,n,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}t.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){n.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var t=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,t,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}t.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",n]})}), +define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,t,n){function a(n,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(t){b=e.indexBy(t,"value")})}function h(e){var t=[m()];return e&&(t=t.concat(e)),g.loading.workPattern=!0,a.all(t).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var n,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return n=b[e.change_reason],e.change_reason_label=n?n.label:"",e.effective_date=e.effective_date?t(e.effective_date).format(a):"",e}).sortBy(function(e){return-t(e.effective_date,a).valueOf()}).value()}n.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}n.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var t=e.groupBy(q,"created_date");C.changeLogRows=e.map(t,d).sort(function(e,t){return t.date.diff(e.date)})}function u(e,t){var n,a,o=m(e);e.entitlements.forEach(function(s,i){n=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),t(s,n,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(n,a){var o,s,i;return s=e.indexBy(n,"entitlement_id.type_id"),i=C.absenceTypes.map(function(t){return o=s[t.id],e.extend({calculation_unit:t.calculation_unit_name},o)}),{date:t(a),entitlements:i}}function m(e){var t;return t=C.changeLogRows.indexOf(e),C.changeLogRows[t+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var t,n,a,o=C.changeLogRows.length-1;o>=0;o--)if(t=C.changeLogRows[o],n=e.pluck(t.entitlements,"comment"),a=e.compact(n),1===a.length){var s=e.findIndex(n,"length");t.highlightedEntitlement=t.entitlements[s]}else a.length>1&&_(o)}function p(e,t){C.changeLogRows.splice(t,0,e)}function h(){return n.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,t;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,t=C.changeLogRows.length-1;e>=0;){var n=C.changeLogRows[e],a=C.changeLogRows[t];n.entitlements.forEach(function(e,t){var n=a.entitlements[t];e.comment===n.comment&&delete e.comment}),e--,t--}}function _(e){var t,n,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(t=s.concat(o).concat(i),n={date:a.date.clone(),entitlements:t},n.highlightedEntitlement=o,p(n,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}n.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(t,n,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=t.chain(T.absencePeriods).filter(function(e){return t.find(q,function(t){return t.period_id===e.id})}).sortBy(function(e){return-n(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=t.filter(T.absenceTypes,function(e){return t.find(q,function(t){return t.type_id===e.id})})}function p(t){var n=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:t,cid:T.contactId,returnUrl:n})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=t.uniq(t.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=t.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(t){this.contactId=T.contactId,this.dismiss=t.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=t.map(T.absencePeriods,function(e){var n=t.map(T.absenceTypes,function(n){var a=t.find(q,function(t){return t.type_id===n.id&&t.period_id===e.id});return a?{amount:a.value,calculation_unit:n.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:n}})}function y(e){var t=e.message+"

Last updated:
By: "+e.author_name+"
Date: "+n.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
";d.info("Calculation comment:",t)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,t,n){function a(n,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(t){return e.find(m.contracts,function(n){return e.find(n.info.leave,function(e){return e.leave_type===t.id})})})}function u(e){var n=o.DATE_FORMAT.toUpperCase();return e?t(e).format(n):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return t(e.info.details.period_start_date)}).map(function(t){var n=t.info,a=n.details,o=e.map(m.absenceTypes,function(t){var a=e.filter(n.leave,function(e){return e.leave_type===t.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:t.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}n.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}n.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(t){return t.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,t,n,a){n.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/absence-tab":n+"/absence-tab"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 4792484fb9c..1f6bed72416 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

","

People I approve filter displays only staff members who you approve leave for.

","

People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

"].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ -e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(e){k(e),H.sections.other.open&&f(e,H.sections.other)}function h(){Object.values(H.sections).forEach(function(e){e.data=[]})}function v(e){var t=U[e.status];t?t(e.leaveRequest):H.refresh()}function g(t){t.dataIndex=e.indexBy(t.data,"id")}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return o.all().then(function(t){H.absencePeriods=e.sortBy(t,"start_date"),H.selectedPeriod=e.find(H.absencePeriods,function(e){return!0===e.current})})}function _(){return s.all().then(s.loadCalculationUnits).then(function(t){H.absenceTypes=t,H.absenceTypesIndexed=e.indexBy(t,"id")})}function q(){return P("approved",{status_id:F(m.statusNames.approved)})}function $(){var t={contact_id:H.contactId,period_id:H.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}}))]).then(function(e){H.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function C(){return i.all({contact_id:H.contactId,period_id:H.selectedPeriod.id},!0).then(function(e){H.entitlements=e}).then(function(){H.absenceTypesFiltered=H.absenceTypes.filter(function(t){var n=e.find(H.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},!(0===t.entitlement&&"1"!==t.allow_overuse&&"1"!==t.allow_accruals_request)})})}function w(){return i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id},H.entitlements).then(function(){return E(H.entitlements)}).then(function(e){H.sections.entitlements.data=e})}function A(){return n.all([i.breakdown({contact_id:H.contactId,period_id:H.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({ -expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:L(e[1].list)})}).then(function(t){H.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),H.sections.expired.data=e.sortBy(H.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:H.contactId,from_date:{from:H.selectedPeriod.start_date},to_date:{to:H.selectedPeriod.end_date},type_id:{IN:H.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function P(e,t){return D(t).then(function(t){H.sections[e].data=t.list})}function T(){return n.all(Object.values(H.sections).filter(function(e){return e.open}).map(x))}function R(){return P("other",{status_id:{in:[F(m.statusNames.rejected),F(m.statusNames.cancelled)]}})}function S(){return P("pending",{status_id:{in:[F(m.statusNames.awaitingApproval),F(m.statusNames.moreInformationRequired)]}})}function O(){return P("holidays",{public_holiday:!0})}function x(e){return e.loading=!0,e.loadLeaveRequests().then(g.bind(this,e)).then(function(){e.loading=!1})}function I(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){H.leaveRequestStatuses=e.indexBy(t,"value")})}function E(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(H.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function L(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function M(){l.subscribe("LeaveRequest::new",function(){H.refresh()}),l.subscribe("LeaveRequest::edit",function(){H.refresh()}),l.subscribe("LeaveRequest::statusUpdate",v),l.subscribe("LeaveRequest::delete",function(e){k(e)})}function k(t){e.forEach(H.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],j(t,a))})}function j(e,t){var n=H.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function B(){H.loading.content=!0,n.all([C(),$()]).then(function(){H.loading.content=!1}).then(function(){return n.all([T(),h()])})}function N(e){var t=H.sections[e];t.open=!t.open,t.open&&!t.data.length&&x(t)}function F(t){return e.find(H.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var U={delete:k,cancel:p},H=this;H.absencePeriods=[],H.absenceTypes=[],H.absenceTypesFiltered=[],H.absenceTypesIndexed={},H.dateFormat=d.DATE_FORMAT,H.leaveRequestStatuses={},H.selectedPeriod=null,H.role="absence-tab"===a.section?"admin":"staff",H.loading={content:!0,page:!0},H.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:q},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:A},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R}},H.labelPeriod=b,H.refresh=B,H.toggleSection=N,function(){n.all([I(),_(),y()]).then(function(){H.loading.page=!1}).then(function(){return n.all([C(),$()])}).then(function(){H.loading.content=!1}),M()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){S().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(){_.calculationUnit=s(_.supportData.calculationUnits,"value",g.calculation_unit)}function s(t,n,a){return e.find(t,function(e){return+e[n]==+a})}function i(){var e,n;return n=t(_.contactData.leaveRequest.from_date).isSame(_.contactData.leaveRequest.to_date,"day"),e=n?"single-date":"multiple-dates","type-"+_.calculationUnit.name+"-on-"+e+"-tooltip"}function u(){g=s(_.supportData.absenceTypes,"id",_.contactData.leaveRequest.type_id),_.contactData.leaveRequest["type_id.title"]=g.title}function c(){"days"===_.calculationUnit.name&&(b=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.from_date_type),y=s(_.supportData.dayTypes,"value",_.contactData.leaveRequest.to_date_type),_.contactData.leaveRequest["from_date_type.label"]=b.label,_.contactData.leaveRequest["to_date_type.label"]=y.label)}function l(e,t,n,a,o){e.stopPropagation(),r.openModal(t,n,a,o)}function d(){_.dates.from=new Date(_.contactData.leaveRequest.from_date),_.dates.to=new Date(_.contactData.leaveRequest.to_date)}function m(){_.contactData.isAccruedTOIL?_.label="AT":"days"===_.calculationUnit.name?f():p()}function f(){_.label=_.contactData.isAM?"AM":_.contactData.isPM?"PM":""}function p(){var e=t(_.contactData.leaveRequest.from_date).isSame(_.date,"day"),n=t(_.contactData.leaveRequest.to_date).isSame(_.date,"day");_.label=e?t(_.contactData.leaveRequest.from_date).format("HH:mm"):n?t(_.contactData.leaveRequest.to_date).format("HH:mm"):""}function h(){_.tooltipTemplate=_.contactData.isAccruedTOIL?"accrued-toil-tooltip":i()}function v(){a.$watch("day.contactData.leaveRequest",function(){_.contactData&&_.contactData.leaveRequest&&(u(),o(),c(),m(),d(),h())})}n.debug("Component: leave-calendar-day");var g,b,y,_=this;_.calculationUnit="",_.dates={from:null,to:null},_.label="",_.tooltipTemplate=null,_.openLeavePopup=l,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){y([e]),B(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(W.period.start_date)&&r.isSameOrBefore(W.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return U[e]}function f(){return W.showOnlyWithLeaveRequests?W.contacts.filter(function(e){return Object.keys(H[e.id]||{}).length}):W.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){x(e),B(e)}function v(e){return CRM.url("civicrm/contact/view",{cid:e})}function g(){return W.contactIdsToReduceTo&&(W.contacts=W.contacts.filter(function(t){return e.includes(W.contactIdsToReduceTo,t.contact_id)||e.find(H,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function b(){W.supportData.dayTypes=e.indexBy(W.supportData.dayTypes,"name"),W.supportData.leaveRequestStatuses=e.indexBy(W.supportData.leaveRequestStatuses,"value"),W.supportData.publicHolidays=e.transform(W.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function y(e){return e.forEach(function(e){var t=A(e);H[e.contact_id]=H[e.contact_id]||{},t.forEach(function(t){H[e.contact_id][t.date]=e})}),a.resolve()}function _(){F.push(r.$on("LeaveCalendar::showMonths",M)),F.push(i.subscribe("LeaveRequest::new",c)),F.push(i.subscribe("LeaveRequest::edit",j)),F.push(i.subscribe("LeaveRequest::updatedByManager",j)),F.push(i.subscribe("LeaveRequest::delete",h)),F.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)}))}function q(e,n,a){var r=W.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function $(e,t){return e.request_type===t}function C(e){return!!W.supportData.publicHolidays[p(e).valueOf()]}function w(t){var n=W.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function A(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===W.month.index&&r.year()===W.month.year&&a.push(e.find(W.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){return e.find(H[t.contact_id],function(e){return t.id===e.id})}function P(t){var n=e.find(W.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[P(u.statusNames.approved),P(u.statusNames.adminApproved),P(u.statusNames.awaitingApproval),P(u.statusNames.moreInformationRequired)]}function R(){return W.month.loading=!0,a.all([O(),S()]).then(g).then(L).then(function(){N=!0}).then(function(){W.month.loading=!1})}function S(){return s.all({from_date:{to:W.month.days[W.month.days.length-1].date},to_date:{from:W.month.days[0].date},status_id:{IN:T()},contact_id:{IN:W.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(W.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return y(e.list)})}function O(){var t=W.month.days[0].date,n=W.month.days[W.month.days.length-1].date;return o.get(W.contacts.map(function(e){return e.id}),t,n).then(function(t){U=e.indexBy(t,"contact_id")})}function x(t){H[t.contact_id]=e.omit(H[t.contact_id],function(e){return e.id===t.id})}function I(){r.$emit("LeaveCalendar::monthDestroyed"),F.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:C(t.date)})}),o.then(function(){return H[n]?H[n][t.date]:null}).then(function(a){e.assign(t.contactsData[n],{leaveRequest:a||null,styles:a?k(a):null,isAccruedTOIL:a?$(a,"toil"):null,isRequested:a?w(a):null,isAM:a?q("half_day_am",a,t.date):null,isPM:a?q("half_day_pm",a,t.date):null})})}function L(){return a.all(W.month.days.map(function(e){return a.all(W.contacts.map(function(t){return E(e,t.id)}))}))}function M(t,n,a){!e.find(n,function(e){return e.index===W.month.index})?W.visible=!1:(W.currentPage=0,W.visible=!0,(a||!N)&&R())}function k(t){var n=e.find(W.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function j(e){var t=D(e);t&&(h(t),-1!==T().indexOf(e.status_id)&&c(e))}function B(e){return a.all(A(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var N=!1,F=[],U={},H={},W=this;W.currentPage=0,W.pageSize=20,W.visible=!1,W.showContactName=!!W.showContactName,W.showOnlyWithLeaveRequests=!!W.showOnlyWithLeaveRequests,W.$onDestroy=I,W.contactsList=f,W.getContactUrl=v,function(){var e=t().month(W.month.index).year(W.month.year);b(),_(),W.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||!!e.includes([$.awaitingApproval,$.moreInformationRequired],n)&&("manager"===q.role||("3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a))}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){K()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){X(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function J(){e.forEach(ee,function(e){e()})}function K(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function X(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=J,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(D).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(t){var n=e.find(G.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function g(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):G.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){G.absencePeriods=e.sortBy(t,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){G.absenceTypes=t,G.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:G.contactId,period_id:G.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return k(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),T({ +request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){G.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function T(t){return u.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return T(t).then(function(t){G.sections[e].data=t.list})}function S(){return n.all(Object.values(G.sections).filter(function(e){return e.open}).map(E))}function O(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function I(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){G.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(G.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(G.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],F(t,a))})}function F(e,t){var n=G.absenceTypesIndexed[e.type_id],a="pending"===t?"future":"current";n.balanceChanges[t]-=e.balance_change,n.remainder[a]-=e.balance_change}function U(){G.loading.content=!0,n.all([A(),w()]).then(M).then(function(){G.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=G.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(G.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=_,G.refresh=U,G.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){G.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){G.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(C(),w(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),I(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function J(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function K(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function X(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Re={},Se=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=X,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,Y(),J(),r.all([ce(),Q(),se(),de()]).then(K).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js index 3f27756c5fd..0cef3cb9d3e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/staff-leave-report.component.js @@ -72,6 +72,7 @@ define([ loadBalanceChanges() ]); }) + .then(processAbsenceTypes) .then(function () { vm.loading.content = false; }); @@ -92,6 +93,25 @@ define([ section.dataIndex[leaveRequest.id] = leaveRequest; } + /** + * Attaches the entitlement information to the absence type it belongs to + * If there is no entitlement for a given absence type, a default + * entitlement object is assigned instead + */ + function attachEntitlementsToAbsenceTypes () { + vm.absenceTypes = vm.absenceTypes.map(function (absenceType) { + var entitlement = _.find(vm.entitlements, function (entitlement) { + return entitlement.type_id === absenceType.id; + }); + + // set entitlement to 0 if no entitlement is present + absenceType.entitlement = entitlement ? entitlement.value : 0; + absenceType.remainder = entitlement ? entitlement.remainder : { current: 0, future: 0 }; + + return absenceType; + }); + } + /** * Handles the cancel status update of leave request by removing them from * their current section and adding them to the "Cancelled and Other" section @@ -116,6 +136,18 @@ define([ }); } + /** + * Filters the absence types, keeping only the ones that either have + * an entitlement greater than 0 or that allow overuse or accrual requests + */ + function filterAbsenceTypes () { + vm.absenceTypesFiltered = vm.absenceTypes.filter(function (absenceType) { + return !((absenceType.entitlement === 0) && + (absenceType.allow_overuse !== '1') && + (absenceType.allow_accruals_request !== '1')); + }); + } + /** * Forwards the status update event to a specific status handler. If none * exists for the given status, a refresh is triggered. @@ -236,10 +268,7 @@ define([ } /** - * Loads the entitlements, including current and future balance, - * and groups the entitlements value and remainder by absence type - * Also Filters the absence types which allows overuse or allows - * accrual request or has entitlement more than 0 + * Loads the entitlements, including current and future balance * * @return {Promise} */ @@ -250,21 +279,6 @@ define([ }, true) .then(function (entitlements) { vm.entitlements = entitlements; - }) - .then(function () { - vm.absenceTypesFiltered = vm.absenceTypes.filter(function (absenceType) { - var entitlement = _.find(vm.entitlements, function (entitlement) { - return entitlement.type_id === absenceType.id; - }); - - // set entitlement to 0 if no entitlement is present - absenceType.entitlement = entitlement ? entitlement.value : 0; - absenceType.remainder = entitlement ? entitlement.remainder : { current: 0, future: 0 }; - - return !((absenceType.entitlement === 0) && - (absenceType.allow_overuse !== '1') && - (absenceType.allow_accruals_request !== '1')); - }); }); } @@ -431,6 +445,14 @@ define([ }); } + /** + * Process the list of absence types objects by augmenting and filter them + */ + function processAbsenceTypes () { + attachEntitlementsToAbsenceTypes(); + filterAbsenceTypes(); + } + /** * For each breakdowns, it sets the absence type id to * each list entry (based on the entitlement they belong to) @@ -544,6 +566,7 @@ define([ loadEntitlements(), loadBalanceChanges() ]) + .then(processAbsenceTypes) .then(function () { vm.loading.content = false; }) From 5f72a48064f5e8c6f050676b36c8b99673669079 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 3 May 2018 11:19:57 +0200 Subject: [PATCH 102/251] PCHR-3221: Fix calendar tooltip scenario --- .../page-objects/ssp-leave-absences-my-leave-calendar.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js index f3773720ce7..d77cc3795b8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-my-leave-calendar.js @@ -1,4 +1,4 @@ -/* globals jQuery, MouseEvent */ +/* globals jQuery */ const page = require('./page'); @@ -31,10 +31,7 @@ module.exports = page.extend({ * pops up. */ async showTooltip () { - await this.puppet.evaluate(() => { - const event = new MouseEvent('mouseover'); - document.querySelector('.chr_leave-calendar__item a').dispatchEvent(event); - }); + await this.puppet.hover('.chr_leave-calendar__item a'); await this.puppet.waitFor('.tooltip', { visible: true }); }, From ec5a05651e5194df92babc218a4f5294dc528a1f Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Thu, 3 May 2018 17:08:51 +0200 Subject: [PATCH 103/251] PCHR-3221: Additional fixes --- .../backstop_data/page-objects/contact-summary.js | 11 ++++++++++- .../backstop_data/page-objects/onboarding-wizard.js | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js index f3a8de6dc57..4a4075542c1 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/contact-summary.js @@ -37,9 +37,18 @@ module.exports = page.extend({ }, /** - * Wait an arbitrary amount of time for the data to load + * Wait an arbitrary amount of time for the data to load, then waits + * for all the spinners to disappear */ async waitForReady () { + await this.puppet.waitFor('#contactsummary', { visible: true }); await this.puppet.waitFor(6000); + await this.puppet.waitFor(function () { + const spinners = document.querySelectorAll('.spinner'); + + return Array.prototype.every.call(spinners, function (dom) { + return dom === null || (dom.offsetWidth <= 0 && dom.offsetHeight <= 0); + }); + }); } }); diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js index 2257cd097cb..a577e879028 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/onboarding-wizard.js @@ -41,9 +41,11 @@ module.exports = page.extend({ */ async reachDependentPage () { await this.reachEmergencyContactPage(); + await this.puppet.waitFor('.webform-component-fieldset', { visible: true }); + await this.puppet.type('#edit-submitted-civicrm-1-contact-1-cg99999-fieldset-civicrm-1-contact-1-cg99999-custom-100000', 'Duke'); + await this.puppet.type('#edit-submitted-civicrm-1-contact-1-cg99999-fieldset-civicrm-1-contact-1-cg99999-custom-100001', '1234'); await this.puppet.click('.webform-next'); await this.puppet.waitFor('input[value="Dependants"]'); - await this.puppet.click('#edit-submitted-do-you-have-dependants-1'); }, /** @@ -52,9 +54,7 @@ module.exports = page.extend({ async reachProfilePicturePage () { await this.reachDependentPage(); await this.puppet.waitFor('.webform-component-fieldset', { visible: true }); - await this.puppet.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); - await this.puppet.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100001', '1234'); - await this.puppet.type('#edit-submitted-first-dependant-civicrm-1-contact-3-cg99999-custom-100010', 'sibling'); + await this.puppet.type('#edit-submitted-civicrm-1-contact-3-cg99999-fieldset-civicrm-1-contact-3-cg99999-custom-100000', 'Duke'); await this.puppet.click('.webform-next'); await this.puppet.waitFor('input[value="Profile Picture"]'); } From 10c3154d3fd267d56f052c3aa6e86152fe8fcd03 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 4 May 2018 10:42:39 +0200 Subject: [PATCH 104/251] PCHR-3221: Fix readySelector for leave balance tab --- .../backstop_data/page-objects/tabs/leave-balances.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js index d01249396d7..48cff77f6c8 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/tabs/leave-balances.js @@ -1,7 +1,7 @@ const tab = require('./tab'); module.exports = tab.extend({ - readySelector: '.chr_leave-balance-tab', + readySelector: '.chr_leave-balance-tab__body .table-responsive', tabTitle: 'Leave Balance', tabUiSref: 'leave-balances' }); From ce3a88a344d78c7e5510498b44e00164dfbe31a3 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 1 May 2018 16:48:55 +0100 Subject: [PATCH 105/251] PCHR-3642: Fix lint in Model processor --- .../src/common/models/model.js | 201 +++++++++--------- 1 file changed, 101 insertions(+), 100 deletions(-) diff --git a/org.civicrm.reqangular/src/common/models/model.js b/org.civicrm.reqangular/src/common/models/model.js index ed7cdff7532..730114229c1 100644 --- a/org.civicrm.reqangular/src/common/models/model.js +++ b/org.civicrm.reqangular/src/common/models/model.js @@ -1,114 +1,115 @@ +/* eslint-env amd */ + define([ - 'common/lodash', - 'common/moment', - 'common/modules/models' + 'common/lodash', + 'common/moment', + 'common/modules/models' ], function (_, moment, models) { - 'use strict'; - - models.factory('Model', function () { + 'use strict'; - /** - * Uses the date format the API expects - * - * @param {string} date - * @return {string} - */ - function apiDateFormat(date) { - return isStandardDateFormat(date) ? date : moment(date, 'DD/MM/YYYY').format('YYYY-MM-DD'); - } + models.factory('Model', function () { + /** + * Uses the date format the API expects + * + * @param {string} date + * @return {string} + */ + function apiDateFormat (date) { + return isStandardDateFormat(date) ? date : moment(date, 'DD/MM/YYYY').format('YYYY-MM-DD'); + } - /** - * Checks if the given date is in the standard YYYY-MM-DD format - * - * @param {string} date - * @return {boolean} - */ - function isStandardDateFormat(date) { - return moment(date, 'YYYY-MM-DD').format('YYYY-MM-DD') === date; - } + /** + * Checks if the given date is in the standard YYYY-MM-DD format + * + * @param {string} date + * @return {boolean} + */ + function isStandardDateFormat (date) { + return moment(date, 'YYYY-MM-DD').format('YYYY-MM-DD') === date; + } - /** - * Transforms date range filters to values the API can use - * - * @param {object} value - * @return {object} - */ - function processDateRangeFilter(value) { - if (value.from && value.to) { - return { 'BETWEEN': [ apiDateFormat(value.from), apiDateFormat(value.to) ] }; - } else if (value.from) { - return { '>=': apiDateFormat(value.from) }; - } else { - return { '<=': apiDateFormat(value.to) }; - } - } + /** + * Transforms date range filters to values the API can use + * + * @param {object} value + * @return {object} + */ + function processDateRangeFilter (value) { + if (value.from && value.to) { + return { 'BETWEEN': [ apiDateFormat(value.from), apiDateFormat(value.to) ] }; + } else if (value.from) { + return { '>=': apiDateFormat(value.from) }; + } else { + return { '<=': apiDateFormat(value.to) }; + } + } - /** - * Transforms multiple values filters to values the API can use - * - * @param {object} value - * @return {object} - */ - function processMultipleValuesFilter(value) { - if (value.in) { - return { 'IN': value.in }; - } else { - return { 'NOT IN': value.nin }; - } - } + /** + * Transforms multiple values filters to values the API can use + * + * @param {object} value + * @return {object} + */ + function processMultipleValuesFilter (value) { + if (value.in) { + return { 'IN': value.in }; + } else { + return { 'NOT IN': value.nin }; + } + } - return { + return { - /** - * Extends the basic Model with the given ChildModel - * - * @param {object} ChildModel - * @return {object} - */ - extend: function (ChildModel) { - return _.assign(Object.create(this), ChildModel); - }, + /** + * Extends the basic Model with the given ChildModel + * + * @param {object} ChildModel + * @return {object} + */ + extend: function (ChildModel) { + return _.assign(Object.create(this), ChildModel); + }, - /** - * Removes falsey values from the filters (except 0 or false) - * - * @param {object} filters - * @return {object|null} - */ - compactFilters: function (filters) { - if (!filters) { - return null; - } + /** + * Removes falsey values from the filters (except 0 or false) + * + * @param {object} filters + * @return {object|null} + */ + compactFilters: function (filters) { + if (!filters) { + return null; + } - return _.pick(filters, function (value) { - return value === 0 || value === false || !!value; - }); - }, + return _.pick(filters, function (value) { + return value === 0 || value === false || !!value; + }); + }, - /** - * Processes the filters provided, removing falsey values (except 0 or false) - * And applying filter-specific transformations if needed - * - * @param {object} rawFilters - The unprocessed filters - * @return {object|null} - */ - processFilters: function (rawFilters) { - if (!rawFilters) { - return null; - } + /** + * Processes the filters provided, removing falsey values (except 0 or false) + * And applying filter-specific transformations if needed + * + * @param {object} rawFilters - The unprocessed filters + * @return {object|null} + */ + processFilters: function (rawFilters) { + if (!rawFilters) { + return null; + } - rawFilters = this.compactFilters(rawFilters); + rawFilters = this.compactFilters(rawFilters); - return _.transform(rawFilters, function (filters, value, key) { - if (value.from || value.to) { - filters[key] = processDateRangeFilter(value); - } else if (value.in || value.nin) { - filters[key] = processMultipleValuesFilter(value); - } else { - filters[key] = value; - } - }, {}); - } - }; - }); + return _.transform(rawFilters, function (filters, value, key) { + if (value.from || value.to) { + filters[key] = processDateRangeFilter(value); + } else if (value.in || value.nin) { + filters[key] = processMultipleValuesFilter(value); + } else { + filters[key] = value; + } + }, {}); + } + }; + }); }); From 78a1d5037c3e9e1fcbc1c43632f9bc0cccb4ea64 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 1 May 2018 16:51:56 +0100 Subject: [PATCH 106/251] PCHR-3642: Augment Model processor --- .../src/common/models/model.js | 12 ++- .../test/models/model.spec.js | 74 ++++++++++++++----- 2 files changed, 65 insertions(+), 21 deletions(-) diff --git a/org.civicrm.reqangular/src/common/models/model.js b/org.civicrm.reqangular/src/common/models/model.js index 730114229c1..89d7508f10e 100644 --- a/org.civicrm.reqangular/src/common/models/model.js +++ b/org.civicrm.reqangular/src/common/models/model.js @@ -19,13 +19,17 @@ define([ } /** - * Checks if the given date is in the standard YYYY-MM-DD format + * Checks if the given date is in the standard YYYY-MM-DD[ HH:mm[:ss]] format * - * @param {string} date - * @return {boolean} + * @param {String} date + * @return {Boolean} */ function isStandardDateFormat (date) { - return moment(date, 'YYYY-MM-DD').format('YYYY-MM-DD') === date; + var standardFormats = ['YYYY-MM-DD', 'YYYY-MM-DD HH:mm', 'YYYY-MM-DD HH:mm:ss']; + + return _.some(standardFormats, function (standardFormat) { + return moment(date, standardFormat).format(standardFormat) === date; + }); } /** diff --git a/org.civicrm.reqangular/test/models/model.spec.js b/org.civicrm.reqangular/test/models/model.spec.js index 880e61c0636..3c130f8ff58 100644 --- a/org.civicrm.reqangular/test/models/model.spec.js +++ b/org.civicrm.reqangular/test/models/model.spec.js @@ -127,29 +127,69 @@ define([ }); describe('period-related filters', function () { - beforeEach(function () { - filters = Model.processFilters({ - filter_1: { from: '20/01/2006', to: '16/02/2006' }, - filter_2: { from: '31/12/2016' }, - filter_3: { to: '02/07/2016' } + describe('when the dates are passed', function () { + beforeEach(function () { + filters = Model.processFilters({ + filter_1: { from: jasmine.any(String), to: jasmine.any(String) }, + filter_2: { from: jasmine.any(String) }, + filter_3: { to: jasmine.any(String) } + }); + }); + + it('build the correct filter structure', function () { + expect(filters).toEqual({ + filter_1: { 'BETWEEN': [jasmine.any(String), jasmine.any(String)] }, + filter_2: { '>=': jasmine.any(String) }, + filter_3: { '<=': jasmine.any(String) } + }); }); }); - it('uses the correct operator depending on the filter name', function () { - expect(filters).toEqual({ - filter_1: { - 'BETWEEN': [jasmine.any(String), jasmine.any(String)] - }, - filter_2: { '>=': jasmine.any(String) }, - filter_3: { '<=': jasmine.any(String) } + describe('when the dates are passed in DD/MM/YYYY format', function () { + beforeEach(function () { + filters = Model.processFilters({ + filter_1: { from: '20/01/2006', to: '16/02/2006' }, + filter_2: { from: '31/12/2016' }, + filter_3: { to: '02/07/2016' } + }); + }); + + it('converts the dates to the expected standard format', function () { + expect(filters).toEqual({ + filter_1: { 'BETWEEN': ['2006-01-20', '2006-02-16'] }, + filter_2: { '>=': '2016-12-31' }, + filter_3: { '<=': '2016-07-02' } + }); }); }); - it('converts the filter values to the expected date format', function () { - expect(filters).toEqual({ - filter_1: { 'BETWEEN': ['2006-01-20', '2006-02-16'] }, - filter_2: { '>=': '2016-12-31' }, - filter_3: { '<=': '2016-07-02' } + describe('when the dates are passed in "YYYY-MM-DD[ HH:mm[:ss]]" formats', function () { + beforeEach(function () { + filters = Model.processFilters({ + filter_1: { from: '2018-01-02', to: '2019-02-03' }, + filter_2: { from: '2020-03-04' }, + filter_3: { to: '2021-04-05' }, + filter_4: { from: '2018-01-02 00:00', to: '2019-02-03 01:00' }, + filter_5: { from: '2020-03-04 23:59' }, + filter_6: { to: '2021-04-05 15:18' }, + filter_7: { from: '2018-01-02 00:00:00', to: '2019-02-03 01:00:01' }, + filter_8: { from: '2020-03-04 23:59:59' }, + filter_9: { to: '2021-04-05 15:18:00' } + }); + }); + + it('converts the dates to the expected standard format', function () { + expect(filters).toEqual({ + filter_1: { 'BETWEEN': ['2018-01-02', '2019-02-03'] }, + filter_2: { '>=': '2020-03-04' }, + filter_3: { '<=': '2021-04-05' }, + filter_4: { 'BETWEEN': ['2018-01-02 00:00', '2019-02-03 01:00'] }, + filter_5: { '>=': '2020-03-04 23:59' }, + filter_6: { '<=': '2021-04-05 15:18' }, + filter_7: { 'BETWEEN': ['2018-01-02 00:00:00', '2019-02-03 01:00:01'] }, + filter_8: { '>=': '2020-03-04 23:59:59' }, + filter_9: { '<=': '2021-04-05 15:18:00' } + }); }); }); }); From 00245728bd9544fbb5f96e98aa9dcd838badd636 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 1 May 2018 16:57:46 +0100 Subject: [PATCH 107/251] PCHR-3642: Improve Model processor --- .../src/common/models/model.js | 125 +++++++++--------- .../test/models/model.spec.js | 2 +- 2 files changed, 65 insertions(+), 62 deletions(-) diff --git a/org.civicrm.reqangular/src/common/models/model.js b/org.civicrm.reqangular/src/common/models/model.js index 89d7508f10e..b345de4a0dd 100644 --- a/org.civicrm.reqangular/src/common/models/model.js +++ b/org.civicrm.reqangular/src/common/models/model.js @@ -8,16 +8,48 @@ define([ 'use strict'; models.factory('Model', function () { + return { + compactFilters: compactFilters, + extend: extend, + processFilters: processFilters + }; + /** - * Uses the date format the API expects + * Returns the date in the format the API expects * - * @param {string} date - * @return {string} + * @param {String} date + * @return {String} */ function apiDateFormat (date) { return isStandardDateFormat(date) ? date : moment(date, 'DD/MM/YYYY').format('YYYY-MM-DD'); } + /** + * Removes falsy values from the filters (except 0 or false) + * + * @param {Object} filters + * @return {Object|null} + */ + function compactFilters (filters) { + if (!filters) { + return null; + } + + return _.pick(filters, function (value) { + return value === 0 || value === false || !!value; + }); + } + + /** + * Extends the basic Model with the given ChildModel + * + * @param {Object} ChildModel + * @return {Object} + */ + function extend (ChildModel) { + return _.assign(Object.create(this), ChildModel); + } + /** * Checks if the given date is in the standard YYYY-MM-DD[ HH:mm[:ss]] format * @@ -35,8 +67,8 @@ define([ /** * Transforms date range filters to values the API can use * - * @param {object} value - * @return {object} + * @param {Object} value + * @return {Object} */ function processDateRangeFilter (value) { if (value.from && value.to) { @@ -48,11 +80,36 @@ define([ } } + /** + * Processes the filters provided, removing falsy values (except 0 or false) + * And applies filter-specific transformations if needed + * + * @param {Object} rawFilters - unprocessed filters + * @return {Object|null} + */ + function processFilters (rawFilters) { + if (!rawFilters) { + return null; + } + + rawFilters = this.compactFilters(rawFilters); + + return _.transform(rawFilters, function (filters, value, key) { + if (value.from || value.to) { + filters[key] = processDateRangeFilter(value); + } else if (value.in || value.nin) { + filters[key] = processMultipleValuesFilter(value); + } else { + filters[key] = value; + } + }, {}); + } + /** * Transforms multiple values filters to values the API can use * - * @param {object} value - * @return {object} + * @param {Object} value + * @return {Object} */ function processMultipleValuesFilter (value) { if (value.in) { @@ -61,59 +118,5 @@ define([ return { 'NOT IN': value.nin }; } } - - return { - - /** - * Extends the basic Model with the given ChildModel - * - * @param {object} ChildModel - * @return {object} - */ - extend: function (ChildModel) { - return _.assign(Object.create(this), ChildModel); - }, - - /** - * Removes falsey values from the filters (except 0 or false) - * - * @param {object} filters - * @return {object|null} - */ - compactFilters: function (filters) { - if (!filters) { - return null; - } - - return _.pick(filters, function (value) { - return value === 0 || value === false || !!value; - }); - }, - - /** - * Processes the filters provided, removing falsey values (except 0 or false) - * And applying filter-specific transformations if needed - * - * @param {object} rawFilters - The unprocessed filters - * @return {object|null} - */ - processFilters: function (rawFilters) { - if (!rawFilters) { - return null; - } - - rawFilters = this.compactFilters(rawFilters); - - return _.transform(rawFilters, function (filters, value, key) { - if (value.from || value.to) { - filters[key] = processDateRangeFilter(value); - } else if (value.in || value.nin) { - filters[key] = processMultipleValuesFilter(value); - } else { - filters[key] = value; - } - }, {}); - } - }; }); }); diff --git a/org.civicrm.reqangular/test/models/model.spec.js b/org.civicrm.reqangular/test/models/model.spec.js index 3c130f8ff58..9d4ffa5dcf9 100644 --- a/org.civicrm.reqangular/test/models/model.spec.js +++ b/org.civicrm.reqangular/test/models/model.spec.js @@ -9,7 +9,7 @@ define([ describe('Model', function () { var Model; - var modelInterface = ['extend', 'compactFilters', 'processFilters']; + var modelInterface = ['compactFilters', 'extend', 'processFilters']; beforeEach(module('common.models')); beforeEach(inject(['Model', function (_Model_) { From f69bba54325ab09eef786abec4bdf219ce953730 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 1 May 2018 18:00:28 +0100 Subject: [PATCH 108/251] PCHR-3642: Fix issue with API fetching requests --- .../shared/components/leave-calendar-month.component.js | 4 ++-- .../shared/components/leave-calendar-month.component.spec.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index b3d0068c8e7..531b28cacdc 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -425,8 +425,8 @@ define([ */ function loadMonthLeaveRequests () { return LeaveRequest.all({ - from_date: { to: vm.month.days[vm.month.days.length - 1].date }, - to_date: { from: vm.month.days[0].date }, + from_date: { to: vm.month.days[vm.month.days.length - 1].date + ' 23:59:59' }, + to_date: { from: vm.month.days[0].date + ' 00:00:00' }, status_id: { 'IN': leaveStatusesToBeDisplayed() }, contact_id: { 'IN': vm.contacts.map(function (contact) { return contact.id; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index 68cfd525b48..0d0dc9af62d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -173,8 +173,8 @@ expect(requestRecentCallFirstArg).toEqual( jasmine.objectContaining({ - from_date: { to: month.days[month.days.length - 1].date }, - to_date: { from: month.days[0].date } + from_date: { to: month.days[month.days.length - 1].date + ' 23:59:59' }, + to_date: { from: month.days[0].date + ' 00:00:00' } }) ); }); From 640a2eb899505fedaca6b56f0b2f4c006a2d09e2 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 1 May 2018 18:00:34 +0100 Subject: [PATCH 109/251] PCHR-3642: Add dist files --- org.civicrm.reqangular/dist/reqangular.min.js | 2 +- .../js/angular/dist/absence-tab.min.js | 4 ++-- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 8 ++++---- .../js/angular/dist/my-leave.min.js | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index cf9318e99db..b3caae161c3 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -117,5 +117,5 @@ e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3) this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
\n
\n
\n
\n'),e.put("time-amount-picker.html",'
\n
\n \n \n
\n h\n
\n \n \n
\n m\n
\n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
    \n
  • \n
    \n
      \n
    • \n
      \n
    • \n
    \n
  • \n
\n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){ define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function o(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{extend:function(t){return e.assign(Object.create(this),t)},compactFilters:function(t){return t?e.pick(t,function(e){return 0===e||!1===e||!!e}):null},processFilters:function(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=i(t):t.in||t.nin?e[n]=o(t):e[n]=t},{})):null}}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); +t.module("ui.router.util").run(["$urlMatcherFactory",function(e){}]),$.$inject=["$locationProvider","$urlMatcherFactoryProvider"],t.module("ui.router.router").provider("$urlRouter",$),w.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider"],t.module("ui.router.state").value("$stateParams",{}).provider("$state",w),x.$inject=[],t.module("ui.router.state").provider("$view",x),t.module("ui.router.state").provider("$uiViewScroll",C),k.$inject=["$state","$injector","$uiViewScroll","$interpolate"],E.$inject=["$compile","$controller","$state","$interpolate"],t.module("ui.router.state").directive("uiView",k),t.module("ui.router.state").directive("uiView",E),T.$inject=["$state","$timeout"],D.$inject=["$state","$stateParams","$interpolate"],t.module("ui.router.state").directive("uiSref",T).directive("uiSrefActive",D).directive("uiSrefActiveEq",D),A.$inject=["$state"],O.$inject=["$state"],t.module("ui.router.state").filter("isState",A).filter("includedByState",O)}(window,window.angular),define("common/angularUiRouter",["common/angular"],function(){}),define("common/modules/routers/compu-ui-router",["common/angular","common/angularUiRouter"],function(e){"use strict";return e.module("compu.ui.router",["ui.router"]).config(["$stateProvider",function(t){var n=t.state;t.resolveForAll=function(e){return t.commonResolve=e,t},t.state=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),define("common/bundles/routers",["common/modules/routers/compu-ng-route","common/modules/routers/compu-ui-router"],function(){}),define("common/decorators/q/q-sequence.decorator",[],function(){return["$delegate",function(e){function t(t){return t.reduce(function(e,t){if("function"!=typeof t)throw new Error("All promises must be wrapped in functions");return e.then(t)},e.resolve())}return e.sequence=t,e}]}),define("common/modules/models-instances",["common/angular","common/decorators/q/q-sequence.decorator","common/modules/apis"],function(e,t){"use strict";return e.module("common.models.instances",["common.apis"]).config(["$provide",function(e){e.decorator("$q",t)}])}),define("common/models/instances/instance",["common/lodash","common/modules/models-instances"],function(e,t){"use strict";t.factory("ModelInstance",function(){return{attributes:function(){return e.transform(this,function(t,n,r){!e.isFunction(this[r])&&(t[r]=this[r])},Object.create(null),this)},defaultCustomData:function(){return{}},extend:function(t){return e.assign(Object.create(this),t)},fromAPI:function(t){return e.transform(t,this.fromAPIFilter.bind(t),Object.create(null))},fromAPIFilter:function(e,t,n){e[n]=this[n]},init:function(t,n){return void 0!==n&&n&&(t=this.fromAPI(t)),t=e.assign(this.defaultCustomData(),t),t=this.transformAttributes(t),e.assign(Object.create(this),t)},transformAttributes:function(e){return e},toAPI:function(){var t=this.attributes();return e.transform(t,this.toAPIFilter.bind(t),Object.create(null))},toAPIFilter:function(e,t,n){e[n]=this[n]}}})}),define("common/instances/contact-job-role-instance.instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContactJobRoleInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/modules/models",["common/angular","common/modules/models-instances"],function(e){"use strict";return e.module("common.models",["common.models.instances"])}),define("common/models/model",["common/lodash","common/moment","common/modules/models"],function(e,t,n){"use strict";n.factory("Model",function(){function n(e){return o(e)?e:t(e,"DD/MM/YYYY").format("YYYY-MM-DD")}function r(t){return t?e.pick(t,function(e){return 0===e||!1===e||!!e}):null}function i(t){return e.assign(Object.create(this),t)}function o(n){var r=["YYYY-MM-DD","YYYY-MM-DD HH:mm","YYYY-MM-DD HH:mm:ss"];return e.some(r,function(e){return t(n,e).format(e)===n})}function a(e){return e.from&&e.to?{BETWEEN:[n(e.from),n(e.to)]}:e.from?{">=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 810015e7e19..cd0ebfdb886 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ !function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(t,a,o,s,i,r){function c(){return d().then(function(t){var a=t.filter(function(e){var t=e.info.details;return n(t.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(n(t.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!t.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}t.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return n.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n){function t(){return{loadContacts:function(){return n.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,t()}}}t.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],n=t(M.selectedPeriod.start_date).clone().startOf("month"),a=t(M.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(n,t){null===t||e.equals(n,t)||w()})}function h(e){M.injectMonths=!0,S("injected").then(function(){w(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+n.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=n.sortBy(e,"start_date"),M.selectedPeriod=n.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function T(){return l.all()}function D(){return o.all([_(),T(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=n.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=n.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:n.noop).then("contacts"===e?q:n.noop).then(function(){h("contacts"===e)})}function w(e){var t=M.selectedMonths.length?M.months.filter(function(e){return n.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",t,!!e)}function I(){M.selectedMonths=[t().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(t){var a=0,o=i.$on("LeaveCalendar::month"+n.capitalize(e),function(){++a===M.months.length&&(o(),t())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),D()])}).then(function(){return M.showFilters?C():n.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){ -return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(Y[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:D(t,"toil"),isRequested:P(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);Y[e.contact_id]=Y[e.contact_id]||{},n.forEach(function(n){Y[e.contact_id][n.date]||(Y[e.contact_id][n.date]=[]),Y[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonths",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function D(e,n){return e.request_type===n}function A(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function P(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.index&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function w(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function I(){return[w(c.statusNames.approved),w(c.statusNames.adminApproved),w(c.statusNames.awaitingApproval),w(c.statusNames.moreInformationRequired)]}function O(){return V.month.loading=!0,a.all([k(),S()]).then(L).then(E).then(function(){W=!0,V.month.loading=!1})}function S(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date},to_date:{from:V.month.days[0].date},status_id:{IN:I()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function k(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(Y,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);Y[n.contact_id]=Y[n.contact_id]||{},t.forEach(function(t){e.remove(Y[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(n.date)})}),s.then(function(){return Y[t]&&Y[t][n.date]?Y[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(n,t,a){!e.find(t,function(e){return e.index===V.month.index})?V.visible=!1:(V.currentPage=0,V.visible=!0,(a||!W)&&O())}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==I().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],G={},Y={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.index).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),S("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,S("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function D(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():D()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function w(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function I(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function O(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function S(e){return ne.selectedAbsenceType.calculation_unit_name===e}function k(e){return ne.request.request_type===e}function L(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(A).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(k("sickness")||S("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function Y(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(S("hours")||k("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return Y(),e=n!==ne.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,Y(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=A,ne.isCalculationUnit=S,ne.isLeaveType=k,ne.isNotWorkingDay=L,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),w(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(I).then(G).then(P).then(O).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(A).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){I[e.label]=n})})).catch(function(){I=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function D(e){return!e.attachment_id||O.canManage}function A(){e.forEach(w,function(e){e()})}function P(e,n){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],w=[],I={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=D,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([T(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(n){var t=e.find(Y.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=G[e.status];n?n(e.leaveRequest):Y.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){Y.absencePeriods=e.sortBy(n,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){Y.absenceTypes=n,Y.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return I("approved",{status_id:H(m.statusNames.approved)})}function D(){var n={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function A(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return E(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),w({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){Y.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function w(n){return c.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function I(e,n){return w(n).then(function(n){Y.sections[e].data=n.list})}function O(){return t.all(Object.values(Y.sections).filter(function(e){return e.open}).map(M))}function S(){return I("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function k(){return I("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function L(){return I("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){Y.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(Y.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(Y.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=Y.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){Y.loading.content=!0,t.all([A(),D()]).then($).then(function(){Y.loading.content=!1}).then(function(){return t.all([O(),v()])})}function W(e){var n=Y.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(Y.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var G={delete:U,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:k},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S}}, -Y.labelPeriod=y,Y.refresh=j,Y.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){Y.loading.page=!1}).then(function(){return t.all([A(),D()])}).then($).then(function(){Y.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return w(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return D(i.uiOptions.fromDate,"from").then(function(){return D(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&O(e,!0))})}function D(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function A(e){return D(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){L[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return L[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function w(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function I(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=I}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(w)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function D(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),D(),P())}function w(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function I(){return l(),L(),F()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),F()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){w(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=I,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function D(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(D)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;Ie.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||w())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(Ie,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){we++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=Ie[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){Ie=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===we&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return we>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){Oe.forEach(function(e){e()})}function De(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},we=0,Ie={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=I,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=De,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal", +return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(Y[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:D(t,"toil"),isRequested:P(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);Y[e.contact_id]=Y[e.contact_id]||{},n.forEach(function(n){Y[e.contact_id][n.date]||(Y[e.contact_id][n.date]=[]),Y[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonths",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function D(e,n){return e.request_type===n}function A(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function P(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.index&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function w(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function I(){return[w(c.statusNames.approved),w(c.statusNames.adminApproved),w(c.statusNames.awaitingApproval),w(c.statusNames.moreInformationRequired)]}function O(){return V.month.loading=!0,a.all([k(),S()]).then(L).then(E).then(function(){W=!0,V.month.loading=!1})}function S(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:I()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function k(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(Y,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);Y[n.contact_id]=Y[n.contact_id]||{},t.forEach(function(t){e.remove(Y[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(n.date)})}),s.then(function(){return Y[t]&&Y[t][n.date]?Y[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(n,t,a){!e.find(t,function(e){return e.index===V.month.index})?V.visible=!1:(V.currentPage=0,V.visible=!0,(a||!W)&&O())}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==I().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],G={},Y={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.index).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),S("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,S("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function D(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():D()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function w(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function I(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function O(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function S(e){return ne.selectedAbsenceType.calculation_unit_name===e}function k(e){return ne.request.request_type===e}function L(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(A).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(k("sickness")||S("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function Y(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(S("hours")||k("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return Y(),e=n!==ne.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,Y(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=A,ne.isCalculationUnit=S,ne.isLeaveType=k,ne.isNotWorkingDay=L,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),w(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(I).then(G).then(P).then(O).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(A).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){I[e.label]=n})})).catch(function(){I=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function D(e){return!e.attachment_id||O.canManage}function A(){e.forEach(w,function(e){e()})}function P(e,n){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],w=[],I={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=D,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([T(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(n){var t=e.find(Y.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=G[e.status];n?n(e.leaveRequest):Y.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){Y.absencePeriods=e.sortBy(n,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){Y.absenceTypes=n,Y.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return I("approved",{status_id:H(m.statusNames.approved)})}function D(){var n={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function A(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return E(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),w({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){Y.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function w(n){return c.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function I(e,n){return w(n).then(function(n){Y.sections[e].data=n.list})}function O(){return t.all(Object.values(Y.sections).filter(function(e){return e.open}).map(M))}function S(){return I("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function k(){return I("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function L(){return I("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){Y.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(Y.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(Y.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=Y.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){Y.loading.content=!0,t.all([A(),D()]).then($).then(function(){Y.loading.content=!1}).then(function(){return t.all([O(),v()])})}function W(e){var n=Y.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(Y.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var G={delete:U,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:k},other:{open:!1,data:[],dataIndex:{},loading:!1, +loadLeaveRequests:S}},Y.labelPeriod=y,Y.refresh=j,Y.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){Y.loading.page=!1}).then(function(){return t.all([A(),D()])}).then($).then(function(){Y.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return w(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return D(i.uiOptions.fromDate,"from").then(function(){return D(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&O(e,!0))})}function D(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function A(e){return D(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){L[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return L[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function w(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function I(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=I}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(w)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function D(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),D(),P())}function w(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function I(){return l(),L(),F()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),F()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){w(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=I,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function D(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(D)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;Ie.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||w())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(Ie,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){we++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=Ie[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){Ie=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===we&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return we>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){Oe.forEach(function(e){e()})}function De(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},we=0,Ie={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=I,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=De,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal", controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index c7c89873afb..244f489895d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=x[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function E(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function x(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(x.selectedPeriod.start_date).clone().startOf("month"),a=n(x.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");x.months=e}function p(){s.$new().$watch(function(){return x.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){x.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){x.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(E)+"Controller").init(x)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){x.absencePeriods=t.sortBy(e,"start_date"),x.selectedPeriod=t.find(x.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){x.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){x.filters.optionValues.regions=e.hrjc_region,x.filters.optionValues.locations=e.hrjc_location,x.filters.optionValues.levelTypes=e.hrjc_level_type,x.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){x.supportData.absenceTypes=e[0],x.supportData.publicHolidays=e[1],x.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,x.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,x.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,x.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return x.injectMonths&&(e=O("destroyed"),x.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){x.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=x.selectedMonths.length?x.months.filter(function(e){return t.includes(x.selectedMonths,e.index)}):x.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){x.selectedMonths=[n().month()]}function T(){return x.roleOverride?r.resolve().then(function(){E=x.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){E=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===x.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,E,x=this;x.absencePeriods=[],x.contacts=[],x.contactIdsToReduceTo=null,x.injectMonths=!1,x.months=[],x.selectedMonths=null,x.selectedPeriod=null,x.showContactName=!1,x.showFilters=!1,x.supportData={},x.loading={calendar:!0,page:!0},x.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},x.labelPeriod=g,x.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return x.showFilters?$():t.noop}).then(function(){h()}).then(function(){x.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(x(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function R(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[R(u.statusNames.approved),R(u.statusNames.adminApproved),R(u.statusNames.awaitingApproval),R(u.statusNames.moreInformationRequired)]}function T(){return Y.month.loading=!0,a.all([I(),O()]).then(E).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date},to_date:{from:Y.month.days[0].date},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function E(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function x(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return L(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&T())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=M,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}), +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(x.selectedPeriod.start_date).clone().startOf("month"),a=n(x.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");x.months=e}function p(){s.$new().$watch(function(){return x.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){x.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){x.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(E)+"Controller").init(x)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){x.absencePeriods=t.sortBy(e,"start_date"),x.selectedPeriod=t.find(x.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){x.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){x.filters.optionValues.regions=e.hrjc_region,x.filters.optionValues.locations=e.hrjc_location,x.filters.optionValues.levelTypes=e.hrjc_level_type,x.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){x.supportData.absenceTypes=e[0],x.supportData.publicHolidays=e[1],x.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,x.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,x.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,x.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return x.injectMonths&&(e=O("destroyed"),x.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){x.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=x.selectedMonths.length?x.months.filter(function(e){return t.includes(x.selectedMonths,e.index)}):x.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){x.selectedMonths=[n().month()]}function T(){return x.roleOverride?r.resolve().then(function(){E=x.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){E=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===x.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,E,x=this;x.absencePeriods=[],x.contacts=[],x.contactIdsToReduceTo=null,x.injectMonths=!1,x.months=[],x.selectedMonths=null,x.selectedPeriod=null,x.showContactName=!1,x.showFilters=!1,x.supportData={},x.loading={calendar:!0,page:!0},x.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},x.labelPeriod=g,x.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return x.showFilters?$():t.noop}).then(function(){h()}).then(function(){x.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(x(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function R(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[R(u.statusNames.approved),R(u.statusNames.adminApproved),R(u.statusNames.awaitingApproval),R(u.statusNames.moreInformationRequired)]}function T(){return Y.month.loading=!0,a.all([I(),O()]).then(E).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function E(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function x(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return L(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&T())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=M,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}), a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function E(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function x(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=E,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([M(),x()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function P(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function T(t){var n=U.filters.leaveRequest;return{contact_id:x(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function E(e,t,n,a){d.openModal.apply(d,arguments)}function x(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=E,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),S(),R(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){T(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){E[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return E[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=E[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){T("from",!0)}):r.resolve()}var E={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){ e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),E())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),E(),B()}function T(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:E(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function E(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function x(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),E(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){x(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return xe.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return xe.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||R())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function E(){Me.errors=[]}function x(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Se,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function G(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){xe.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(Ee="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ee="admin")}).then(function(){return"staff"===Ee&&u(_.permissions.ssp.manage).then(function(e){e&&(Ee="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ee===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Se=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():x()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(xe.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",Ee="",xe=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=S,Me.canSubmit=T,Me.closeAlert=E,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=G,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n, leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index c9d77d2630c..5211729e001 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in T)B(T[o])&&(t[o]=T[o](t,T.$delegates[o]));return P[n]=t,!t[S]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?T:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function S(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function T(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:T(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=S(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,T(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||S()})}function h(e){E.injectMonths=!0,O("injected").then(function(){S(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(T)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function S(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function T(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){R().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function S(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[S(u.statusNames.approved),S(u.statusNames.adminApproved),S(u.statusNames.awaitingApproval),S(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date},to_date:{from:Y.month.days[0].date},status_id:{IN:T()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return M(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==T().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=L,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o, -promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function S(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function T(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),S(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(T).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function f(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){T[e.label]=t})})).catch(function(){T=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(S,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],S=[],T={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,R.canSubmit=d,R.canUploadMore=f,R.formatDateTime=m,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(R(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function S(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function T(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function R(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),T(),S(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return S(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function S(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function T(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=T}n.controller("RequestModalDetailsLeaveController",a), -a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(S)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function S(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function T(){return l(),x(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){S(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=T,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Te.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||S())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Te,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Se++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Te[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Te=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Se&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Se>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Se=0,Te={},Re=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=T,Le.canSubmit=R,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){ -return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||S()})}function h(e){E.injectMonths=!0,O("injected").then(function(){S(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(T)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function S(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function T(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){R().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function S(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[S(u.statusNames.approved),S(u.statusNames.adminApproved),S(u.statusNames.awaitingApproval),S(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:T()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return M(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==T().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=L,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{ +getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function S(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function T(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),S(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(T).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function f(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){T[e.label]=t})})).catch(function(){T=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(S,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],S=[],T={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,R.canSubmit=d,R.canUploadMore=f,R.formatDateTime=m,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(R(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function S(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function T(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function R(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),T(),S(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return S(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function S(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function T(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=T} +n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(S)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function S(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function T(){return l(),x(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){S(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=T,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Te.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||S())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Te,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Se++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Te[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Te=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Se&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Se>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Se=0,Te={},Re=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=T,Le.canSubmit=R,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s, +forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 1a255e714a8..51b5033925d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],w={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(w,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(w,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function w(){return l.all()}function C(){return r.all([y(),w(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ -e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){R().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),C()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:C(n,"toil"),isRequested:D(n),isAM:w("half_day_am",n,e.date),isPM:w("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function w(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function A(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([x(),O()]).then(I).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date},to_date:{from:Y.month.days[0].date},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function x(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function I(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return M(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=L,Y.contactsList=f,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=w[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(w,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:w[e].label,isDirectAction:w[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,w={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function w(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function C(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():C()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=w(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(w(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(w(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=w,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(D).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function w(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function C(e){return!e.attachment_id||R.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=C,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([w(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(t){var n=e.find(G.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function g(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):G.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){G.absencePeriods=e.sortBy(t,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){G.absenceTypes=t,G.absenceTypesIndexed=e.indexBy(t,"id")})}function w(){return S("approved",{status_id:W(m.statusNames.approved)})}function C(){var t={contact_id:G.contactId,period_id:G.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){ -return k(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),T({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){G.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function T(t){return u.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return T(t).then(function(t){G.sections[e].data=t.list})}function R(){return n.all(Object.values(G.sections).filter(function(e){return e.open}).map(E))}function O(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function I(){return S("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){G.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(G.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(G.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=G.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){G.loading.content=!0,n.all([A(),C()]).then(M).then(function(){G.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=G.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(G.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=_,G.refresh=U,G.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){G.loading.page=!1}).then(function(){return n.all([A(),C()])}).then(M).then(function(){G.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return C(s.uiOptions.fromDate,"from").then(function(){return C(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),w(e)})}function w(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function C(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return C(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){R(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){R("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function w(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function C(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(w(),C(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),I(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,w){function C(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(C)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return w.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",we),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function we(){Re.forEach(function(e){e()})}function Ce(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Se={},Re=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=R,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ce,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){R().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),C()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:C(n,"toil"),isRequested:D(n),isAM:w("half_day_am",n,e.date),isPM:w("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function w(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function A(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([x(),O()]).then(I).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function x(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function I(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return M(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=L,Y.contactsList=f,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=w[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(w,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:w[e].label,isDirectAction:w[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,w={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function w(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function C(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():C()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=w(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(w(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(w(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=w,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(D).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function w(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function C(e){return!e.attachment_id||R.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=C,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([w(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(t){var n=e.find(G.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function g(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):G.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){G.absencePeriods=e.sortBy(t,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){G.absenceTypes=t,G.absenceTypesIndexed=e.indexBy(t,"id")})}function w(){return S("approved",{status_id:W(m.statusNames.approved)})}function C(){var t={contact_id:G.contactId,period_id:G.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id +},G.entitlements).then(function(){return k(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),T({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){G.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function T(t){return u.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return T(t).then(function(t){G.sections[e].data=t.list})}function R(){return n.all(Object.values(G.sections).filter(function(e){return e.open}).map(E))}function O(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function I(){return S("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){G.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(G.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(G.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=G.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){G.loading.content=!0,n.all([A(),C()]).then(M).then(function(){G.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=G.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(G.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=_,G.refresh=U,G.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){G.loading.page=!1}).then(function(){return n.all([A(),C()])}).then(M).then(function(){G.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return C(s.uiOptions.fromDate,"from").then(function(){return C(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),w(e)})}function w(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function C(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return C(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){R(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){R("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function w(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function C(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(w(),C(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),I(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,w){function C(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(C)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return w.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",we),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function we(){Re.forEach(function(e){e()})}function Ce(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Se={},Re=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=R,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ce,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file From 92eca40b0057a09fc1d8fdf72a091be138d243f9 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 4 May 2018 11:19:33 +0200 Subject: [PATCH 110/251] PCHR-3221: Increase wait time for ssp tasks page --- .../backstop_data/page-objects/ssp-tasks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js index b15951916f9..1a022363c86 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-tasks.js @@ -23,6 +23,6 @@ module.exports = modal.extend({ * to wait a couple of seconds for it to "stabilize" before taking the screenshot */ async waitForReady () { - await this.puppet.waitFor(2000); + await this.puppet.waitFor(4000); } }); From 2a618ee81b3dde79c93e91ada30e81e82d9d9c6e Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 4 May 2018 14:43:39 +0200 Subject: [PATCH 111/251] PCHR-3221: Fix waitForReady logic for documents dashboard --- .../backstop_data/page-objects/documents.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js index b152a94702e..8d23ecdb94f 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/documents.js @@ -54,9 +54,14 @@ module.exports = page.extend({ }, /** - * Waits until the specified select is visible on the page + * Waits until the user name in the "Staff" column and the filter dates are visible */ async waitForReady () { await this.puppet.waitFor('.ct-filter-date', { visible: true }); + await this.puppet.waitFor('.ct-table-documents [href^="/civicrm/contact/view"]', { visible: true }); + // For some reason Puppetteer considers the user name visible even when it + // isn't really yet, this slight delay allows the element to be fully visible + // before taking the screenshots + await this.puppet.waitFor(500); } }); From d79426df0225acae2d8b47ef9d1ab9885b7cea82 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Fri, 4 May 2018 15:08:50 +0200 Subject: [PATCH 112/251] PCHR-3221: Improve wait logic in the editRequest() method --- .../page-objects/ssp-leave-absences-manager-leave-requests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js index 184f06bb8c3..215e58609be 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/page-objects/ssp-leave-absences-manager-leave-requests.js @@ -68,7 +68,7 @@ module.exports = page.extend({ */ async editRequest (row) { await this.puppet.click('body > ul.dropdown-menu:nth-of-type(' + (row || 1) + ') li:first-child a'); - await this.puppet.waitFor('.modal-content .spinner:nth-child(1)', { hidden: true }); + await this.puppet.waitFor('leave-request-popup-details-tab', { visible: true }); await this.puppet.waitFor('leave-request-popup-details-tab .spinner', { hidden: true }); }, From c2f3e1c619a3d3f88be719b228b5138840579c24 Mon Sep 17 00:00:00 2001 From: Alessandro Verdura Date: Sat, 5 May 2018 18:39:20 +0200 Subject: [PATCH 113/251] PCHR-3221: Avoid dimensions-related diffs --- .../backstop_data/scenarios/ssp-la-manager.json | 3 ++- .../backstop_data/scenarios/ssp-onboarding-wizard.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json index b4c0c624163..d19e490dfb3 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-la-manager.json @@ -10,7 +10,8 @@ "label": "SSP / Manager Leave / Legend expanded", "url": "{{siteUrl}}/manager-leave#/manager-leave/calendar", "onReadyScript": "ssp/manager-leave/calendar-legend-expanded.js", - "user": "civihr_manager" + "user": "civihr_manager", + "requireSameDimensions": false }, { "label": "SSP / Manager Leave / Show all contacts", diff --git a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json index 62d961e18af..0a83c2822e9 100644 --- a/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json +++ b/uk.co.compucorp.civicrm.hrcore/backstop_data/scenarios/ssp-onboarding-wizard.json @@ -35,7 +35,8 @@ { "label": "SSP / Onboarding Wizard / Dependants", "url": "{{siteUrl}}/onboarding-form", - "onReadyScript": "onboarding-wizard/dependents.js" + "onReadyScript": "onboarding-wizard/dependents.js", + "requireSameDimensions": false }, { "label": "SSP / Onboarding Wizard / Profile Picture", From 022cd44a24cf661884e591cb8b3c66264dfab96d Mon Sep 17 00:00:00 2001 From: Davi Alexandre Date: Wed, 9 May 2018 09:30:41 -0300 Subject: [PATCH 114/251] PCHR-3652: Fix failing PHP test --- .../phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveRequestTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveRequestTest.php index cf05d7f40cb..fdcd2be3a13 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/LeaveRequestTest.php @@ -3415,8 +3415,8 @@ public function testToilCanBeAccruedWhenTheCurrentBalanceForPeriodEntitlementIsZ } public function testToilCanBeAccruedWhenTheToilRequestHasNoWorkingDay() { - $dateSaturday = CRM_Utils_Date::processDate('2018-05-05'); - $dateSunday = CRM_Utils_Date::processDate('2018-05-06'); + $dateSaturday = CRM_Utils_Date::processDate('saturday next week'); + $dateSunday = CRM_Utils_Date::processDate('sunday next week'); $period = AbsencePeriodFabricator::fabricate([ 'start_date' => $dateSaturday, From 36145ddf8fe0e664621797baa4fabe966d0303ec Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Wed, 9 May 2018 14:13:22 +0100 Subject: [PATCH 115/251] PCHR-3654: Make it impossible to set a default Work pattern as non default --- .../HRLeaveAndAbsences/BAO/WorkPattern.php | 23 +++++++++++++------ .../BAO/WorkPatternTest.php | 12 ++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php index f27f88251f5..57af47a13e6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php @@ -135,14 +135,23 @@ public static function validateDefaultWorkPattern($params) { ); } - if($isUpdate && $isToBeDisabled) { - $isDefaultWorkPattern = self::isDefault($params['id']); + if(!$isUpdate) { + return; + } - if ($isDefaultWorkPattern) { - throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( - 'You cannot disable the default Work Pattern' - ); - } + $isDefaultWorkPattern = self::isDefault($params['id']); + + if($isToBeDisabled && $isDefaultWorkPattern) { + throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( + 'You cannot disable the default Work Pattern' + ); + } + + $isToBeUncheckedAsDefault = isset($params['is_default']) && !$params['is_default']; + if($isToBeUncheckedAsDefault && $isDefaultWorkPattern) { + throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( + 'It is not possible to have no default Work Pattern' + ); } } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php index 6bd6db72e9a..a337caabd11 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php @@ -692,6 +692,18 @@ public function testCannotDisableTheDefaultWorkPattern() { WorkPattern::create($params); } + public function testCannotMakeTheDefaultWorkPatternNonDefault() { + $workPattern = WorkPatternFabricator::fabricate(['is_default' => 1]); + + $this->setExpectedException( + CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException::class, + 'It is not possible to have no default Work Pattern' + ); + + $params = ['id' => $workPattern->id, 'is_default' => 0]; + WorkPattern::create($params); + } + public function testWorkPatternLabelsShouldBeUnique() { WorkPatternFabricator::fabricate(['label' => 'WorkPattern 1']); From 02019480965e9b44eb5fffe6e99e0b96e975234c Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Thu, 10 May 2018 14:06:53 +0100 Subject: [PATCH 116/251] PCHR-3660: Make it impossible to set a disabled Work pattern as default. --- .../HRLeaveAndAbsences/BAO/WorkPattern.php | 31 ++++++++++++++----- .../BAO/WorkPatternTest.php | 12 +++++++ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php index 57af47a13e6..e9183cf1ac5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php @@ -139,7 +139,15 @@ public static function validateDefaultWorkPattern($params) { return; } - $isDefaultWorkPattern = self::isDefault($params['id']); + $workPattern = self::findById($params['id']); + $isDefaultWorkPattern = self::isDefault($workPattern); + $isDisabledWorkPattern = !self::isActive($workPattern); + + if($isDisabledWorkPattern && $isToBeSetAsDefault) { + throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( + 'You cannot set a disabled work pattern as the default' + ); + } if($isToBeDisabled && $isDefaultWorkPattern) { throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( @@ -187,19 +195,28 @@ private static function validateWorkPatternTitle($params) { } /** - * Checks whether the Work Pattern with the given ID - * is the default Work Pattern or not. + * Checks whether the Work Pattern is the default Work Pattern or not. * - * @param int $workPatternID + * @param WorkPattern $workPattern * * @return boolean */ - private static function isDefault($workPatternID) { - $workPattern = self::findById($workPatternID); - + private static function isDefault(WorkPattern $workPattern) { return $workPattern->is_default; } + /** + * + * Checks whether the Work Pattern is enabled. + * + * @param WorkPattern $workPattern + * + * @return boolean + */ + private static function isActive(WorkPattern $workPattern) { + return $workPattern->is_active; + } + /** * Returns the default WorkPattern * diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php index a337caabd11..541df4c9992 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php @@ -704,6 +704,18 @@ public function testCannotMakeTheDefaultWorkPatternNonDefault() { WorkPattern::create($params); } + public function testCannotMakeADisabledWorkPatternAsDefault() { + $workPattern = WorkPatternFabricator::fabricate(['is_active' => 0]); + + $this->setExpectedException( + CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException::class, + 'You cannot set a disabled work pattern as the default' + ); + + $params = ['id' => $workPattern->id, 'is_default' => 1]; + WorkPattern::create($params); + } + public function testWorkPatternLabelsShouldBeUnique() { WorkPatternFabricator::fabricate(['label' => 'WorkPattern 1']); From d468a33319350b6872aa1e7300eeb83fb12cb387 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Thu, 10 May 2018 14:37:03 +0100 Subject: [PATCH 117/251] PCHR-3660: Refactoring, made isActive and isDefault method to be public methods. Add tests. --- .../HRLeaveAndAbsences/BAO/WorkPattern.php | 20 ++++++---------- .../BAO/WorkPatternTest.php | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php index e9183cf1ac5..447da2ef193 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/WorkPattern.php @@ -140,23 +140,21 @@ public static function validateDefaultWorkPattern($params) { } $workPattern = self::findById($params['id']); - $isDefaultWorkPattern = self::isDefault($workPattern); - $isDisabledWorkPattern = !self::isActive($workPattern); - if($isDisabledWorkPattern && $isToBeSetAsDefault) { + if(!$workPattern->isActive() && $isToBeSetAsDefault) { throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( 'You cannot set a disabled work pattern as the default' ); } - if($isToBeDisabled && $isDefaultWorkPattern) { + if($isToBeDisabled && $workPattern->isDefault()) { throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( 'You cannot disable the default Work Pattern' ); } $isToBeUncheckedAsDefault = isset($params['is_default']) && !$params['is_default']; - if($isToBeUncheckedAsDefault && $isDefaultWorkPattern) { + if($isToBeUncheckedAsDefault && $workPattern->isDefault()) { throw new CRM_HRLeaveAndAbsences_Exception_InvalidWorkPatternException( 'It is not possible to have no default Work Pattern' ); @@ -197,24 +195,20 @@ private static function validateWorkPatternTitle($params) { /** * Checks whether the Work Pattern is the default Work Pattern or not. * - * @param WorkPattern $workPattern - * * @return boolean */ - private static function isDefault(WorkPattern $workPattern) { - return $workPattern->is_default; + public function isDefault() { + return (bool)$this->is_default; } /** * * Checks whether the Work Pattern is enabled. * - * @param WorkPattern $workPattern - * * @return boolean */ - private static function isActive(WorkPattern $workPattern) { - return $workPattern->is_active; + public function isActive() { + return (bool)$this->is_active; } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php index 541df4c9992..5382e822a6b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/BAO/WorkPatternTest.php @@ -692,6 +692,30 @@ public function testCannotDisableTheDefaultWorkPattern() { WorkPattern::create($params); } + public function testisActiveReturnsTrueWhenWorkPatternIsActive() { + $workPattern = WorkPatternFabricator::fabricate(['is_active' => 1]); + + $this->assertTrue($workPattern->isActive()); + } + + public function testisActiveReturnsFalseWhenWorkPatternIsNotActive() { + $workPattern = WorkPatternFabricator::fabricate(['is_active' => 0]); + + $this->assertFalse($workPattern->isActive()); + } + + public function testisDefaultReturnsTrueWhenWorkPatternIsTheDefault() { + $workPattern = WorkPatternFabricator::fabricate(['is_default' => 1]); + + $this->assertTrue($workPattern->isDefault()); + } + + public function testisDefaultReturnsFalseWhenWorkPatternIsNotTheDefault() { + $workPattern = WorkPatternFabricator::fabricate(['is_default' => 0]); + + $this->assertFalse($workPattern->isDefault()); + } + public function testCannotMakeTheDefaultWorkPatternNonDefault() { $workPattern = WorkPatternFabricator::fabricate(['is_default' => 1]); From cc7514b47b69f3c1f86915d46e73ced3b4dc3b60 Mon Sep 17 00:00:00 2001 From: Michael Devery Date: Mon, 14 May 2018 12:20:01 +0100 Subject: [PATCH 118/251] PCHR-3671: Revert changes to footer This reverts commits a752114 and 50a01e6 because the permission variables are not always assigned, leading to problems. --- .../CRM/Hrjobcontract/Page/View/Summary.tpl | 2 +- .../CRM/Contact/Page/View/Summary.tpl | 2 +- hrui/templates/CRM/common/footer.tpl | 5 ++--- uk.co.compucorp.civicrm.hrcore/hrcore.php | 21 ++----------------- 4 files changed, 6 insertions(+), 24 deletions(-) diff --git a/hrjobcontract/CRM/Hrjobcontract/Page/View/Summary.tpl b/hrjobcontract/CRM/Hrjobcontract/Page/View/Summary.tpl index a48f5138c65..ad812c53eda 100644 --- a/hrjobcontract/CRM/Hrjobcontract/Page/View/Summary.tpl +++ b/hrjobcontract/CRM/Hrjobcontract/Page/View/Summary.tpl @@ -49,7 +49,7 @@ {* CRM-12735 - Conditionally include the Actions and Edit buttons if contact is NOT in trash.*} {if !$isDeleted} - {if $canAccessCiviCRM } + {if call_user_func(array('CRM_Core_Permission','check'), 'access CiviCRM')}
  • {include file="CRM/Contact/Page/Inline/Actions.tpl"}
  • diff --git a/hrui/templates/CRM/Contact/Page/View/Summary.tpl b/hrui/templates/CRM/Contact/Page/View/Summary.tpl index d4c338a9b5b..ce11a92063f 100644 --- a/hrui/templates/CRM/Contact/Page/View/Summary.tpl +++ b/hrui/templates/CRM/Contact/Page/View/Summary.tpl @@ -47,7 +47,7 @@ {* CRM-12735 - Conditionally include the Actions and Edit buttons if contact is NOT in trash.*} {if !$isDeleted} - {if $canAccessCiviCRM} + {if call_user_func(array('CRM_Core_Permission','check'), 'access CiviCRM')}
  • {if !empty($alternativeActionsTemplate)} {include file="$alternativeActionsTemplate"} diff --git a/hrui/templates/CRM/common/footer.tpl b/hrui/templates/CRM/common/footer.tpl index 7095af499e3..217e9f3ae22 100644 --- a/hrui/templates/CRM/common/footer.tpl +++ b/hrui/templates/CRM/common/footer.tpl @@ -23,8 +23,7 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} - -{if $canAccessCiviCRM } +{if call_user_func(array('CRM_Core_Permission','check'), 'access CiviCRM')} {include file="CRM/common/accesskeys.tpl"} {if !empty($contactId)} {include file="CRM/common/contactFooter.tpl"} @@ -34,7 +33,7 @@ {* PCHR-1323 - Display CiviHR version info. *} {ts}Powered by CiviHR {/ts} {civihrVersion}. - {if $isRoot && !empty ($footer_status_severity)} + {if !empty($footer_status_severity)} {$footer_status_message}.   diff --git a/uk.co.compucorp.civicrm.hrcore/hrcore.php b/uk.co.compucorp.civicrm.hrcore/hrcore.php index 2a57939d13a..34dccfffc9e 100644 --- a/uk.co.compucorp.civicrm.hrcore/hrcore.php +++ b/uk.co.compucorp.civicrm.hrcore/hrcore.php @@ -10,8 +10,6 @@ use CRM_HRContactActionsMenu_Component_Menu as ActionsMenu; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; -use CRM_HRContactActionsMenu_Helper_Contact as ContactHelper; -use CRM_HRCore_CMSData_UserRoleFactory as CMSUserRoleFactory; /** * Implements hook_civicrm_config(). @@ -272,27 +270,12 @@ function hrcore_civicrm_pre($op, $objectName, $objectId, &$params) { } /** - * Implements hrcore_civicrm_pageRun() + * Implements hrcore_civicrm_pageRun. * - * @param CRM_Core_Page $page + * @link https://docs.civicrm.org/dev/en/master/hooks/hook_civicrm_pageRun/ */ function hrcore_civicrm_pageRun($page) { _hrcore_add_js_session_vars(); - - $contactID = CRM_Core_Session::getLoggedInContactID(); - - $isRoot = FALSE; - if ($contactID) { - $framework = CRM_Core_Config::singleton()->userFramework; - $userInfo = ContactHelper::getUserInformation($contactID); - $roleService = CMSUserRoleFactory::create($framework, $userInfo); - $userRoles = $roleService->getRoles(); - $isRoot = in_array('administrator', $userRoles); - } - - // assign these variables for use in all pages (in use in the footer) - $page->assign('isRoot', $isRoot); - $page->assign('canAccessCiviCRM', CRM_Core_Permission::check('access CiviCRM')); } /** From 6c930334cac296dfd161937016bf848030bf714a Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 18 May 2018 18:09:51 +0100 Subject: [PATCH 119/251] PCHR-3516: Modify ACL query to allow a user see other people'e leave requests. --- .../CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php index 83a46c6be63..c3b53b2b938 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php @@ -1326,9 +1326,14 @@ public function addSelectWhereClause() { return; } - $clauses['contact_id'] = $this->getLeaveInformationACLClauses(); + $leaveTable = CRM_HRLeaveAndAbsences_BAO_LeaveRequest::getTableName(); + + $query = "IN (SELECT DISTINCT contact_id FROM {$leaveTable})"; + + $clauses['contact_id'] = $query; CRM_Utils_Hook::selectWhereClause($this, $clauses); + return $clauses; } From 92075ad4488205d8186dc0e6eb65978cff5bb09c Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 18 May 2018 18:10:52 +0100 Subject: [PATCH 120/251] PCHR-3516: Refactoring tests and fixing broken tests. --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 185 ++++-------------- 1 file changed, 42 insertions(+), 143 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index 75fd5fa2dc5..bfa5f7dd9b3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1726,7 +1726,7 @@ public function testGetAndGetFullShouldReturnInformationForContactsWithActiveLea $this->assertNotEmpty($resultGetFull['values'][$leaveRequest1->id]); } - public function testGetAndGetFullShouldReturnEmptyResponseForALoggedInLeaveManagerWhenUnassignedIsTrue() { + public function testGetAndGetFullReturnResultsForUnAssignedContactForLoggedInLeaveManagerWhenUnassignedIsTrue() { $manager1 = ContactFabricator::fabricate(); $this->registerCurrentLoggedInContactInSession($manager1['id']); CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; @@ -1772,16 +1772,18 @@ public function testGetAndGetFullShouldReturnEmptyResponseForALoggedInLeaveManag 'to_date_type' => 1 ], true); - - // No results will be returned because the unassigned parameter has a true value - // and a manager can only see contacts assigned to him that he manages, the unassigned parameter negates that. + // The manager will see results for the contact with the inactive leave manager relationship. // We need to set check permissions to true here so that civi can add // the appropriate ACL clause to the LeaveRequest queries $result = civicrm_api3('LeaveRequest', 'get', ['unassigned' => true, 'check_permissions' => true]); $resultGetFull = civicrm_api3('LeaveRequest', 'getFull', ['unassigned' => true, 'check_permissions' => true]); - $this->assertEquals(0, $result['count']); - $this->assertEquals(0, $resultGetFull['count']); + $this->assertEquals(1, $result['count']); + $contactData = array_shift($result['values']); + $this->assertEquals($staffMember2['id'], $contactData['contact_id']); + $this->assertEquals(1, $resultGetFull['count']); + $contactData = array_shift($resultGetFull['values']); + $this->assertEquals($staffMember2['id'], $contactData['contact_id']); } public function testGetAndGetFullShouldReturnResultsForContactsManagedByLoggedInLeaveManagerWhenUnassignedIsFalse() { @@ -3637,7 +3639,7 @@ public function testDeleteCommentShouldThrowAnExceptionIfCommentIDIsMissing() { civicrm_api3('LeaveRequest', 'deletecomment', []); } - public function testGetAndGetFullReturnsOnlyDataLinkedToLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { + public function testGetAndGetFulShouldReturnResultsContactsOtherThanLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); @@ -3680,16 +3682,20 @@ public function testGetAndGetFullReturnsOnlyDataLinkedToLoggedInUserWhenUserIsNo 'status_id' => 1 ], true); + //The logged in contact would be able to see results for the other contact too since the Leave ACL + //allows it. $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); + $this->assertEquals(2, $result['count']); $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); + $this->assertEquals(2, $result['count']); $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); } - public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUserManagesWhenLoggedInUserIsALeaveApprover() { + public function testGetAndGetFullReturnsDataForManageesAndNonManageesWhenLoggedInUserIsALeaveApprover() { $manager = ContactFabricator::fabricate(); $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); @@ -3735,112 +3741,17 @@ public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUser 'status_id' => 1 ], true); + //Results will be returned for both leave contacts even though contact1 is not being managed by + //the logged in manager. $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); - $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); - - $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); - $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); - } - - public function testGetAndGetFullReturnsOnlyDataLinkedToContactsThatLoggedInUserManagesWhenLoggedInUserIsALeaveApproverWithOneOfTheAvailableRelationships() { - $this->setLeaveApproverRelationshipTypes([ - 'has leaves approved by', - 'has things managed by', - ]); - - $manager1 = ContactFabricator::fabricate(); - $manager2 = ContactFabricator::fabricate(); - $contact1 = ContactFabricator::fabricate(); - $contact2 = ContactFabricator::fabricate(); - $contact3 = ContactFabricator::fabricate(); - - $this->setContactAsLeaveApproverOf($manager1, $contact2, null, null, true, 'has things managed by'); - $this->setContactAsLeaveApproverOf($manager2, $contact1, null, null, true, 'has leaves approved by'); - $this->setContactAsLeaveApproverOf($manager2, $contact3, null, null, true, 'has leaves managed by'); - - HRJobContractFabricator::fabricate( - [ 'contact_id' => $contact2['id'] ], - [ - 'period_start_date' => '2016-01-01', - 'period_end_date' => '2016-10-01' - ] - ); - - HRJobContractFabricator::fabricate( - [ 'contact_id' => $contact1['id'] ], - [ - 'period_start_date' => '2016-01-01', - 'period_end_date' => '2016-10-01' - ] - ); - - HRJobContractFabricator::fabricate( - [ 'contact_id' => $contact3['id'] ], - [ - 'period_start_date' => '2016-01-01', - 'period_end_date' => '2016-10-01' - ] - ); - - $leaveRequestContact1 = LeaveRequestFabricator::fabricateWithoutValidation([ - 'contact_id' => $contact1['id'], - 'type_id' => $this->absenceType->id, - 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), - 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), - 'from_date_type' => 1, - 'to_date_type' => 1, - 'status_id' => 1 - ], true); - - LeaveRequestFabricator::fabricateWithoutValidation([ - 'contact_id' => $contact2['id'], - 'type_id' => $this->absenceType->id, - 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), - 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), - 'from_date_type' => 1, - 'to_date_type' => 1, - 'status_id' => 1 - ], true); - - $leaveRequestContact3 = LeaveRequestFabricator::fabricateWithoutValidation([ - 'contact_id' => $contact3['id'], - 'type_id' => $this->absenceType->id, - 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), - 'to_date' => CRM_Utils_Date::processDate('2016-02-20'), - 'from_date_type' => 1, - 'to_date_type' => 1, - 'status_id' => 1 - ], true); - - CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; - - // Manager1 only manages contact2 (though the 'has things managed by' relationship), - // so only contact2 leave requests will be returned - $this->registerCurrentLoggedInContactInSession($manager1['id']); - $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); - $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); - - $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); - $this->assertEquals(1, $result['count']); - $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); - - // Manager2 manages contact1 (through the 'has leaves approved by' relationship), - // and contact3 (through the 'manage things for' relationship), so leave - // requests from both should be returned - $this->registerCurrentLoggedInContactInSession($manager2['id']); - $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true]); $this->assertEquals(2, $result['count']); - $this->assertEquals($contact1['id'], $result['values'][$leaveRequestContact1->id]['contact_id']); - $this->assertEquals($contact3['id'], $result['values'][$leaveRequestContact3->id]['contact_id']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); - $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true]); + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); $this->assertEquals(2, $result['count']); - $this->assertEquals($contact1['id'], $result['values'][$leaveRequestContact1->id]['contact_id']); - $this->assertEquals($contact3['id'], $result['values'][$leaveRequestContact3->id]['contact_id']); - $this->assertEquals($contact3['id'], $result['values'][$leaveRequestContact3->id]['contact_id']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); } public function testGetAndGetFullReturnsAllDataWhenLoggedInUserHasViewAllContactsPermission() { @@ -4178,7 +4089,7 @@ public function testGetBreakdownShouldReturnEmptyIfTheGiveLeaveRequestDoesnExist $this->assertEmpty($result['values']); } - public function testGetBreakdownShouldReturnEmptyIfAStaffMemberTriesToGetTheBreakdownOfAnotherStaffMember() { + public function testGetBreakdownAlsoReturnsTheBreakdownOfAnotherStaffMemberWhenAStaffMemberTriesAccessingIt() { $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); @@ -4198,13 +4109,13 @@ public function testGetBreakdownShouldReturnEmptyIfAStaffMemberTriesToGetTheBrea $this->registerCurrentLoggedInContactInSession($contact1['id']); - // Contact1 should not be able to get the breakdown for a leave request of + // Contact1 should also be able to get the breakdown for a leave request of // Contact2 $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ 'leave_request_id' => $leaveRequest->id, 'check_permissions' => true, ]); - $this->assertEmpty($result['values']); + $this->assertCount(3, $result['values']); $this->registerCurrentLoggedInContactInSession($contact2['id']); @@ -4216,47 +4127,29 @@ public function testGetBreakdownShouldReturnEmptyIfAStaffMemberTriesToGetTheBrea $this->assertCount(3, $result['values']); } - public function testGetBreakdownShouldReturnEmptyIfAManagerTriesToGetTheBreakdownOfSomeoneWhoTheyDontManage() { + public function testGetBreakdownShouldReturnsResultsForManageesAndNonManageesOfALeaveManager() { $manager = ContactFabricator::fabricate(); $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); + HRJobContractFabricator::fabricate( + ['contact_id' => $contact1['id']], + ['period_start_date' => CRM_Utils_Date::processDate('+5 days')] + ); + HRJobContractFabricator::fabricate( ['contact_id' => $contact2['id']], ['period_start_date' => CRM_Utils_Date::processDate('+5 days')] ); - $leaveRequest = LeaveRequestFabricator::fabricateWithoutValidation([ + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'type_id' => $this->absenceType->id, - 'contact_id' => $contact2['id'], + 'contact_id' => $contact1['id'], 'from_date' => CRM_Utils_Date::processDate('+5 days'), 'to_date' => CRM_Utils_Date::processDate('+7 days'), ], true); - $this->registerCurrentLoggedInContactInSession($manager['id']); - $this->setContactAsLeaveApproverOf($manager, $contact1); - $this->setPermissions(['access AJAX API']); - - // Manager only manages Contact 1, so they should not be able to get the - // breakdown for a leave request of Contact2 - $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ - 'leave_request_id' => $leaveRequest->id, - 'check_permissions' => true, - ]); - $this->assertEmpty($result['values']); - } - - public function testGetBreakdownShouldNotReturnEmptyIfAManagerTriesToGetTheBreakdownOfSomeoneTheyManage() { - $manager = ContactFabricator::fabricate(); - $contact1 = ContactFabricator::fabricate(); - $contact2 = ContactFabricator::fabricate(); - - HRJobContractFabricator::fabricate( - ['contact_id' => $contact2['id']], - ['period_start_date' => CRM_Utils_Date::processDate('+5 days')] - ); - - $leaveRequest = LeaveRequestFabricator::fabricateWithoutValidation([ + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'type_id' => $this->absenceType->id, 'contact_id' => $contact2['id'], 'from_date' => CRM_Utils_Date::processDate('+5 days'), @@ -4268,7 +4161,13 @@ public function testGetBreakdownShouldNotReturnEmptyIfAManagerTriesToGetTheBreak $this->setPermissions(['access AJAX API']); $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ - 'leave_request_id' => $leaveRequest->id, + 'leave_request_id' => $leaveRequest1->id, + 'check_permissions' => true, + ]); + $this->assertCount(3, $result['values']); + + $result = civicrm_api3('LeaveRequest', 'getBreakdown', [ + 'leave_request_id' => $leaveRequest2->id, 'check_permissions' => true, ]); $this->assertCount(3, $result['values']); From 27926053dd2c9c9d6bca5f90341fe6b540374ed3 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 15 May 2018 12:56:52 +0100 Subject: [PATCH 121/251] PCHR-3518: Redesign legend --- .../leave-calendar-legend.component.js | 8 ++ .../leave-calendar-legend.component.spec.js | 9 ++ .../scss/components/_leave-calendar.scss | 115 +++++++++++------- .../scss/mixins/_gradients.scss | 2 +- .../components/leave-calendar-legend.html | 112 +++-------------- 5 files changed, 100 insertions(+), 146 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 4d40d39661b..7cc5e9b9eb8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -18,7 +18,15 @@ define([ $log.debug('Component: leave-calendar-legend'); var vm = this; + vm.legendCollapsed = true; + vm.other_badges = [ + { label: 'AM', hint: 'AM Only' }, + { label: 'PM', hint: 'PM Only' }, + { label: 'HH:MM', hint: 'Time', type: 'hours' }, + { label: '', hint: 'Requested', type: 'requested' }, + { label: 'AT', hint: 'Accrued TOIL' } + ]; vm.getAbsenceTypeStyle = getAbsenceTypeStyle; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index c5ddb67b8bb..d83d75832ff 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -29,6 +29,15 @@ define([ expect(controller.legendCollapsed).toBe(true); }); + it('has a list of "other" badges', function () { + expect(controller.other_badges).toEqual(jasmine.any(Array)); + expect(controller.other_badges[0]).toEqual(jasmine.objectContaining({ + label: jasmine.any(String), + hint: jasmine.any(String) + })); + expect(controller.other_badges.length).toBe(5); + }); + describe('getAbsenceTypeStyle()', function () { var style, absenceType; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index e4766859fd4..d9ad3e5fad7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -1,9 +1,15 @@ -$chr-leave-calendar-cell-height: 35px; -$chr-leave-calendar-cell-font-size: 10px; -$chr-leave-calendar-item-requested-border-color: #c7cbd0; -$chr-leave-calendar-item-requested-border-height: 0.5em; -$chr-leave-calendar-legend-size: 20px; - +$chr-leave-calendar-cell-height: 35px; +$chr-leave-calendar-cell-font-size: 10px; +$chr-leave-calendar-item-requested-border-color: #c7cbd0; +$chr-leave-calendar-item-requested-border-height: 0.5em; +$chr-leave-calendar-legend-header-top-margin: 20px; +$chr-leave-calendar-legend-badge-border-radius: 2px; +$chr-leave-calendar-legend-badge-padding: 0 8px; +$chr-leave-calendar-legend-badge-margin: 10px; +$chr-leave-calendar-legend-badge-size: 24px; +$chr-leave-calendar-legend-badge-square-right-margin: 20px; +$chr-leave-calendar-legend-badge-square-font-size: 12px; +$chr-leave-calendar-legend-badge-square-hours-font-size: 6px; .chr_leave-calendar__dates-container { overflow-x: auto; @@ -143,47 +149,6 @@ $chr-leave-calendar-legend-size: 20px; height: 100%; } -.chr_leave-calendar__legend__title { - font-size: $font-size-small; -} - -.chr_leave-calendar__legend { - > .row:not(:first-child) { - margin-top: 20px; - } - - .chr_leave-calendar__legend__entry { - margin-top: 10px; - - @media (min-width: $screen-sm-min) { - margin-top: 0; - } - } -} - -.chr_leave-calendar__legend__entry { - overflow: auto; - - & + & { - margin-top: 10px; - } - - > .chr_leave-calendar__item { - font-size: 8px; - height: $chr-leave-calendar-legend-size; - margin-right: 10px; - position: absolute; - width: $chr-leave-calendar-legend-size; - } -} - -.chr_leave-calendar__legend__label { - display: inline-block; - font-size: $font-size-small; - margin-left: 26px; -} - - .chr_leave-calendar__month-header { background: $panel-default-heading-bg; @@ -273,3 +238,59 @@ $chr-leave-calendar-legend-size: 20px; margin-right: 20px; width: calc(100% - 50px); } + +// Legend + +.chr_leave-calendar__legend__title { + font-size: $font-size-small; +} + +.chr_leave-calendar__legend__header:not(:first-child) { + margin-top: $chr-leave-calendar-legend-header-top-margin; +} + +.chr_leave-calendar__legend__type-badge, +.chr_leave-calendar__legend__other-badge-wrapper { + float: left; + line-height: $chr-leave-calendar-legend-badge-size; + margin-top: $chr-leave-calendar-legend-badge-margin; + white-space: nowrap; +} + +.chr_leave-calendar__legend__other-badge-wrapper { + margin-right: $chr-leave-calendar-legend-badge-square-right-margin; +} + +.chr_leave-calendar__legend__type-badge, +.chr_leave-calendar__legend__other-badge { + color: $gray-dark; + height: $chr-leave-calendar-legend-badge-size; +} + +.chr_leave-calendar__legend__type-badge { + border-radius: $chr-leave-calendar-legend-badge-border-radius; + color: $crm-white; + margin-right: $chr-leave-calendar-legend-badge-margin; + margin-top: 10px; + padding: $chr-leave-calendar-legend-badge-padding; +} + +.chr_leave-calendar__legend__other-badge { + border: solid 1px $crm-grayblue-dark; + border-radius: $chr-leave-calendar-legend-badge-border-radius; + float: left; + font-size: $chr-leave-calendar-legend-badge-square-font-size; + font-weight: 600; + margin-right: $chr-leave-calendar-legend-badge-margin; + text-align: center; + width: $chr-leave-calendar-legend-badge-size; + + &.chr_leave-calendar__legend__other-badge-hours { + font-size: $chr-leave-calendar-legend-badge-square-hours-font-size; + font-weight: $badge-font-weight; + } + + &.chr_leave-calendar__legend__other-badge-requested { + @include striped-background($crm-grayblue-dark); + } +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss index 23e156f3f70..f55bfe0b86a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss @@ -1,3 +1,3 @@ @mixin striped-background($stripe-color) { - background: repeating-linear-gradient(45deg, $stripe-color, $stripe-color 5px, transparent 5px, transparent 8px); + background: repeating-linear-gradient(45deg, $stripe-color, $stripe-color 2px, transparent 2px, transparent 7px); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index d60e2f00c3e..089cd55e23a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -9,106 +9,22 @@

    -
    -
    -
    -
    - {{absenceType.title}} -
    -
    -
    -
    -
    AM -
    - {{absenceType.title}} AM Only -
    -
    -
    PM -
    - {{absenceType.title}} PM Only -
    -
    -
    -
    -
    - 10:00 -
    - {{absenceType.title}} specific time -
    -
    -
    -
    -
    - Requested {{absenceType.title}} -
    -
    -
    -
    -
    AM -
    - Requested {{absenceType.title}} AM -
    -
    -
    PM -
    - Requested {{absenceType.title}} PM -
    -
    -
    -
    -
    - 10:00 -
    - Requested {{absenceType.title}} specific time -
    +
    Types
    +
    +
    + {{absenceType.title}}
    -
    -
    -
    -
    - AT -
    - Accrued TOIL -
    -
    -
    -
    -
    - AT -
    - Requested Accrued TOIL -
    -
    -
    -
    -
    -
    -
    - Weekend -
    -
    -
    -
    -
    - Public Holiday -
    -
    -
    -
    -
    - Non Working Day -
    +
    Other
    +
    +
    +
    + {{otherBadge.label}}
    + {{otherBadge.hint}}
    From 6042fb9c7fb67cdd0850572505ad39db138e9829 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 15 May 2018 12:56:59 +0100 Subject: [PATCH 122/251] PCHR-3518: Add leave request status in calendar tooltip --- .../outside-namespace/_leave-calendar.scss | 13 +++++++++- .../shared/components/leave-calendar-day.html | 26 +++++++++++-------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/outside-namespace/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/outside-namespace/_leave-calendar.scss index 01dcf9d5315..3b09ee00812 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/outside-namespace/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/outside-namespace/_leave-calendar.scss @@ -1,5 +1,6 @@ $chr-leave-calendar-tooltip-shadow: 0 3px 8px 0 rgba(49, 40, 40, 0.25); $chr-leave-calendar-tooltip-item-min-width: 154px; +$chr-leave-calendar-tooltip-font-size: 11px; // @TODO the tooltip style should be moved to the global styling .chr_leave-calendar__day-tooltip { @@ -20,8 +21,9 @@ $chr-leave-calendar-tooltip-item-min-width: 154px; } } -.chr_leave-calendar__day-tooltip_item { +.chr_leave-calendar__day-tooltip__item { cursor: pointer; + font-size: $chr-leave-calendar-tooltip-font-size; min-width: $chr-leave-calendar-tooltip-item-min-width; padding: $crm-gap-medium; @@ -29,3 +31,12 @@ $chr-leave-calendar-tooltip-item-min-width: 154px; background-color: $gray-light; } } + +.chr_leave-calendar__day-tooltip__item_absence-type { + font-size: $font-size-base; +} + +.chr_leave-calendar__day-tooltip__item_request-status { + color: $crm-gray-matte; + margin-bottom: #{$font-size-base - $chr-leave-calendar-tooltip-font-size}; +} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html index d6cdb346f4d..fb448f85674 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html @@ -45,32 +45,36 @@
    -
    - {{day.contactData.leaveRequestsAttributes[leaveRequest.id].absenceTypeTitle}} +
    + {{day.contactData.leaveRequestsAttributes[leaveRequest.id].absenceTypeTitle}} +
    +
    + {{day.supportData.leaveRequestStatuses[leaveRequest.status_id].label}}
    {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date_type}}
    - From: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date | date:'HH:mm'}}
    - To: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date | date:'HH:mm'}}
    - For: {{ leaveRequest.from_date_amount | timeUnitApplier :day.contactData.leaveRequestsAttributes[leaveRequest.id].unit }} +
    From: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date | date:'HH:mm'}}
    +
    To: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date | date:'HH:mm'}}
    +
    For: {{ leaveRequest.from_date_amount | timeUnitApplier :day.contactData.leaveRequestsAttributes[leaveRequest.id].unit }}
    - From: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date | date:'dd MMM yyyy'}}, - {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date_type}}
    - To: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date | date:'dd MMM yyyy'}}, - {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date_type}} +
    From: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date | date:'dd MMM yyyy'}}, + {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date_type}}
    +
    To: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date | date:'dd MMM yyyy'}}, + {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date_type}}
    - From: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date | date:'dd MMM yyyy HH:mm'}}
    - To: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date | date:'dd MMM yyyy HH:mm'}} +
    From: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].from_date | date:'dd MMM yyyy HH:mm'}}
    +
    To: {{day.contactData.leaveRequestsAttributes[leaveRequest.id].to_date | date:'dd MMM yyyy HH:mm'}}
    From 53b4723553d3627a7dcadf328d1ec178885df70b Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 15 May 2018 15:07:25 +0100 Subject: [PATCH 123/251] PCHR-3518: PR Feedback --- .../css/leaveandabsence.css | 2 +- .../js/angular/dist/absence-tab.min.js | 8 +- .../js/angular/dist/admin-dashboard.min.js | 10 +- .../js/angular/dist/manager-leave.min.js | 10 +- .../js/angular/dist/my-leave.min.js | 8 +- .../leave-calendar-legend.component.js | 12 +- .../leave-calendar-legend.component.spec.js | 12 +- .../scss/components/_leave-calendar.scss | 198 +++++++++--------- .../scss/mixins/_gradients.scss | 2 +- .../components/leave-calendar-legend.html | 6 +- 10 files changed, 135 insertions(+), 133 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css index 8fbc3f4b460..73a04318327 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css @@ -1 +1 @@ -#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:1px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 8px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, rgba(0,0,0,0.1), rgba(0,0,0,0.1) 5px, transparent 5px, transparent 8px)}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend>.row:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend .chr_leave-calendar__legend__entry{margin-top:10px}@media (min-width: 768px){#bootstrap-theme .chr_leave-calendar__legend .chr_leave-calendar__legend__entry{margin-top:0}}#bootstrap-theme .chr_leave-calendar__legend__entry{overflow:auto}#bootstrap-theme .chr_leave-calendar__legend__entry+#bootstrap-theme .chr_leave-calendar__legend__entry{margin-top:10px}#bootstrap-theme .chr_leave-calendar__legend__entry>.chr_leave-calendar__item{font-size:8px;height:20px;margin-right:10px;position:absolute;width:20px}#bootstrap-theme .chr_leave-calendar__legend__label{display:inline-block;font-size:12px;margin-left:26px}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip_item{cursor:pointer;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip_item:hover{background-color:#e8eef0}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip_item{cursor:pointer;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip_item:hover{background-color:#e8eef0}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} +#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index cd0ebfdb886..7abfc209cc8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(t,a,o,s,i,r){function c(){return d().then(function(t){var a=t.filter(function(e){var t=e.info.details;return n(t.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(n(t.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!t.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}t.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return n.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n){function t(){return{loadContacts:function(){return n.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,t()}}}t.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],n=t(M.selectedPeriod.start_date).clone().startOf("month"),a=t(M.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(n,t){null===t||e.equals(n,t)||w()})}function h(e){M.injectMonths=!0,S("injected").then(function(){w(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+n.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=n.sortBy(e,"start_date"),M.selectedPeriod=n.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function T(){return l.all()}function D(){return o.all([_(),T(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=n.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=n.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(A).then("period"===e?f:n.noop).then("contacts"===e?q:n.noop).then(function(){h("contacts"===e)})}function w(e){var t=M.selectedMonths.length?M.months.filter(function(e){return n.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",t,!!e)}function I(){M.selectedMonths=[t().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(t){var a=0,o=i.$on("LeaveCalendar::month"+n.capitalize(e),function(){++a===M.months.length&&(o(),t())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(A).then(g).then(function(){return o.all([q(),D()])}).then(function(){return M.showFilters?C():n.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){ -return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(Y[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:D(t,"toil"),isRequested:P(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);Y[e.contact_id]=Y[e.contact_id]||{},n.forEach(function(n){Y[e.contact_id][n.date]||(Y[e.contact_id][n.date]=[]),Y[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonths",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function D(e,n){return e.request_type===n}function A(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function P(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.index&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function w(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function I(){return[w(c.statusNames.approved),w(c.statusNames.adminApproved),w(c.statusNames.awaitingApproval),w(c.statusNames.moreInformationRequired)]}function O(){return V.month.loading=!0,a.all([k(),S()]).then(L).then(E).then(function(){W=!0,V.month.loading=!1})}function S(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:I()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function k(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(Y,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);Y[n.contact_id]=Y[n.contact_id]||{},t.forEach(function(t){e.remove(Y[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(n.date)})}),s.then(function(){return Y[t]&&Y[t][n.date]?Y[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(n,t,a){!e.find(t,function(e){return e.index===V.month.index})?V.visible=!1:(V.currentPage=0,V.visible=!0,(a||!W)&&O())}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==I().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],G={},Y={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.index).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),S("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,S("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function D(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():D()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function w(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function I(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function O(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function S(e){return ne.selectedAbsenceType.calculation_unit_name===e}function k(e){return ne.request.request_type===e}function L(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(A).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(k("sickness")||S("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function Y(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(S("hours")||k("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return Y(),e=n!==ne.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,Y(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=A,ne.isCalculationUnit=S,ne.isLeaveType=k,ne.isNotWorkingDay=L,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),w(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(I).then(G).then(P).then(O).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(A).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){I[e.label]=n})})).catch(function(){I=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function D(e){return!e.attachment_id||O.canManage}function A(){e.forEach(w,function(e){e()})}function P(e,n){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],w=[],I={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=A,O.canRemoveAttachment=D,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([T(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(n){var t=e.find(Y.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=G[e.status];n?n(e.leaveRequest):Y.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){Y.absencePeriods=e.sortBy(n,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){Y.absenceTypes=n,Y.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return I("approved",{status_id:H(m.statusNames.approved)})}function D(){var n={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function A(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return E(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),w({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){Y.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function w(n){return c.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function I(e,n){return w(n).then(function(n){Y.sections[e].data=n.list})}function O(){return t.all(Object.values(Y.sections).filter(function(e){return e.open}).map(M))}function S(){return I("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function k(){return I("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function L(){return I("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){Y.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(Y.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(Y.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=Y.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){Y.loading.content=!0,t.all([A(),D()]).then($).then(function(){Y.loading.content=!1}).then(function(){return t.all([O(),v()])})}function W(e){var n=Y.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(Y.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var G={delete:U,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:k},other:{open:!1,data:[],dataIndex:{},loading:!1, -loadLeaveRequests:S}},Y.labelPeriod=y,Y.refresh=j,Y.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){Y.loading.page=!1}).then(function(){return t.all([A(),D()])}).then($).then(function(){Y.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return w(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return D(i.uiOptions.fromDate,"from").then(function(){return D(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&O(e,!0))})}function D(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function A(e){return D(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){L[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return L[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function w(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function I(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=I}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(w)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function D(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),D(),P())}function w(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function I(){return l(),L(),F()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),F()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){w(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=I,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function D(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(D)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;Ie.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||w())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(Ie,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){we++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=Ie[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){Ie=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===we&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return we>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){Oe.forEach(function(e){e()})}function De(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},we=0,Ie={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=I,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=De,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal", -controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(t,a,o,s,i,r){function c(){return d().then(function(t){var a=t.filter(function(e){var t=e.info.details;return n(t.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(n(t.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!t.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?c():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}t.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return n.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n){function t(){return{loadContacts:function(){return n.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,t()}}}t.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t,a){function o(a,o,s,i,r,c,u,l,d,m){function f(){for(var e=[],n=t(M.selectedPeriod.start_date).clone().startOf("month"),a=t(M.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");M.months=e}function p(){i.$new().$watch(function(){return M.selectedMonths},function(n,t){null===t||e.equals(n,t)||w()})}function h(e){M.injectMonths=!0,S("injected").then(function(){w(e)}).then(function(){M.loading.calendar=!1})}function v(){k=a("LeaveCalendar"+n.capitalize(L)+"Controller").init(M)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return c.all().then(function(e){M.absencePeriods=n.sortBy(e,"start_date"),M.selectedPeriod=n.find(M.absencePeriods,function(e){return!!e.current})}).then(f).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function y(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return k.loadContacts().then(function(e){M.contacts=e})}function C(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){M.filters.optionValues.regions=e.hrjc_region,M.filters.optionValues.locations=e.hrjc_location,M.filters.optionValues.levelTypes=e.hrjc_level_type,M.filters.optionValues.departments=e.hrjc_department})}function T(){return l.all()}function A(){return o.all([_(),T(),y()]).then(function(e){M.supportData.absenceTypes=e[0],M.supportData.publicHolidays=e[1],M.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,M.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,M.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,M.supportData.toilAmounts=n.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function D(){var e=o.resolve();return M.injectMonths&&(e=S("destroyed"),M.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function R(e){e=n.includes(["contacts","period"],e)?e:"period",o.resolve().then(function(){M.loading.calendar=!0}).then(D).then("period"===e?f:n.noop).then("contacts"===e?q:n.noop).then(function(){h("contacts"===e)})}function w(e){var t=M.selectedMonths.length?M.months.filter(function(e){return n.includes(M.selectedMonths,e.index)}):M.months;i.$emit("LeaveCalendar::showMonths",t,!!e)}function I(){M.selectedMonths=[t().month()]}function O(){return M.roleOverride?o.resolve().then(function(){L=M.roleOverride}):o.all([m(r.permissions.admin.administer),m(r.permissions.ssp.manage)]).then(function(e){L=e[0]?"admin":e[1]?"manager":"staff"})}function S(e){return o(function(t){var a=0,o=i.$on("LeaveCalendar::month"+n.capitalize(e),function(){++a===M.months.length&&(o(),t())})})}s.debug("Component: leave-calendar");var k,L,M=this;M.absencePeriods=[],M.contacts=[],M.contactIdsToReduceTo=null,M.injectMonths=!1,M.months=[],M.selectedMonths=null,M.selectedPeriod=null,M.showContactName=!1,M.showFilters=!1,M.supportData={},M.loading={calendar:!0,page:!0},M.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},M.labelPeriod=b,M.refresh=R,function(){O().then(p).then(v).then(D).then(g).then(function(){return o.all([q(),A()])}).then(function(){return M.showFilters?C():n.noop}).then(function(){h()}).then(function(){M.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",o]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){ +return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(Y[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:P(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);Y[e.contact_id]=Y[e.contact_id]||{},n.forEach(function(n){Y[e.contact_id][n.date]||(Y[e.contact_id][n.date]=[]),Y[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonths",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function D(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function P(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.index&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function w(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function I(){return[w(c.statusNames.approved),w(c.statusNames.adminApproved),w(c.statusNames.awaitingApproval),w(c.statusNames.moreInformationRequired)]}function O(){return V.month.loading=!0,a.all([k(),S()]).then(L).then(E).then(function(){W=!0,V.month.loading=!1})}function S(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:I()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function k(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(Y,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);Y[n.contact_id]=Y[n.contact_id]||{},t.forEach(function(t){e.remove(Y[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(n.date)})}),s.then(function(){return Y[t]&&Y[t][n.date]?Y[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(n,t,a){!e.find(t,function(e){return e.index===V.month.index})?V.visible=!1:(V.currentPage=0,V.visible=!0,(a||!W)&&O())}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==I().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],G={},Y={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.index).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),S("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,S("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function w(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function I(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function O(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function S(e){return ne.selectedAbsenceType.calculation_unit_name===e}function k(e){return ne.request.request_type===e}function L(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(k("sickness")||S("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function G(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function Y(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(S("hours")||k("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return Y(),e=n!==ne.selectedAbsenceType.calculation_unit_name,G(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,Y(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),G(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=S,ne.isLeaveType=k,ne.isNotWorkingDay=L,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),w(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(I).then(G).then(P).then(O).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return O.fileUploader&&O.fileUploader.queue.length>0}function m(){return O.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return O.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){I[e.label]=n})})).catch(function(){I=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||O.canManage}function D(){e.forEach(w,function(e){e()})}function P(e,n){O.fileUploader.queue&&O.fileUploader.queue.length>0?O.fileUploader.uploadAll({entityID:O.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],w=[],I={},O=Object.create(this);return O.filesLoaded=!1,O.fileUploader=null,O.today=Date.now(),O.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",O.userDateFormat=i.DATE_FORMAT,O.$onDestroy=D,O.canRemoveAttachment=A,O.canSubmit=d,O.canUploadMore=m,O.formatDateTime=f,O.getAuthorName=p,O.getFilesAmount=h,O.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",O),g(),a.all([T(),q()]).then(_).finally(function(){O.filesLoaded=!0})}(),O}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(n){var t=e.find(Y.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=G[e.status];n?n(e.leaveRequest):Y.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){Y.absencePeriods=e.sortBy(n,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){Y.absenceTypes=n,Y.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return I("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return E(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),w({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){Y.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function w(n){return c.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function I(e,n){return w(n).then(function(n){Y.sections[e].data=n.list})}function O(){return t.all(Object.values(Y.sections).filter(function(e){return e.open}).map(M))}function S(){return I("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function k(){return I("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function L(){return I("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){Y.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(Y.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(Y.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=Y.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){Y.loading.content=!0,t.all([D(),A()]).then($).then(function(){Y.loading.content=!1}).then(function(){return t.all([O(),v()])})}function W(e){var n=Y.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(Y.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var G={delete:U,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[], +dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:k},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S}},Y.labelPeriod=y,Y.refresh=j,Y.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){Y.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){Y.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return w(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),S(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),O(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(S)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&O(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){O(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){L[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return L[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function w(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function I(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){O("from",!0)})):o.resolve()}function O(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function S(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){O("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=I}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(w)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),A(),P())}function w(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function I(){return l(),L(),F()}function O(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),F()}function S(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){w(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=I,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=S,c.setDaysSelectionModeExtended=O,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;Ie.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function O(){var e=R();return xe.isMode("edit")&&(e=e&&(G()||w())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function S(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function G(){return!e.equals(Ie,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function Y(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Oe.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){we++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Se}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Se=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Se})}):f.find(Se).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=Ie[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){Ie=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,S(),D(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===we&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return we>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){Oe.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},we=0,Ie={},Oe=[],Se="",ke="No entitlement",Le="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=I,xe.canSubmit=O,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=Y,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m} +n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 244f489895d..a8b822498c6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[R]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=x[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function R(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function T(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function E(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=R(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=T(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function x(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=T(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(x.selectedPeriod.start_date).clone().startOf("month"),a=n(x.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");x.months=e}function p(){s.$new().$watch(function(){return x.selectedMonths},function(t,n){null===n||e.equals(t,n)||R()})}function h(e){x.injectMonths=!0,O("injected").then(function(){R(e)}).then(function(){x.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(E)+"Controller").init(x)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){x.absencePeriods=t.sortBy(e,"start_date"),x.selectedPeriod=t.find(x.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){x.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){x.filters.optionValues.regions=e.hrjc_region,x.filters.optionValues.locations=e.hrjc_location,x.filters.optionValues.levelTypes=e.hrjc_level_type,x.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){x.supportData.absenceTypes=e[0],x.supportData.publicHolidays=e[1],x.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,x.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,x.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,x.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return x.injectMonths&&(e=O("destroyed"),x.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){x.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function R(e){var n=x.selectedMonths.length?x.months.filter(function(e){return t.includes(x.selectedMonths,e.index)}):x.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){x.selectedMonths=[n().month()]}function T(){return x.roleOverride?r.resolve().then(function(){E=x.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){E=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===x.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,E,x=this;x.absencePeriods=[],x.contacts=[],x.contactIdsToReduceTo=null,x.injectMonths=!1,x.months=[],x.selectedMonths=null,x.selectedPeriod=null,x.showContactName=!1,x.showFilters=!1,x.supportData={},x.loading={calendar:!0,page:!0},x.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},x.labelPeriod=g,x.refresh=D,function(){T().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return x.showFilters?$():t.noop}).then(function(){h()}).then(function(){x.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(x(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function R(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[R(u.statusNames.approved),R(u.statusNames.adminApproved),R(u.statusNames.awaitingApproval),R(u.statusNames.moreInformationRequired)]}function T(){return Y.month.loading=!0,a.all([I(),O()]).then(E).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function E(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function x(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return L(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&T())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=M,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}), -a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function R(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function T(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function E(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function x(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=E,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),R(),te.initChildController().then(function(){return s.all([M(),x()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(T).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return T.fileUploader&&T.fileUploader.queue.length>0}function f(){return T.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return T.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||T.canManage}function w(){e.forEach(R,function(e){e()})}function P(e,t){T.fileUploader.queue&&T.fileUploader.queue.length>0?T.fileUploader.uploadAll({entityID:T.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],R=[],S={},T=Object.create(this);return T.filesLoaded=!1,T.fileUploader=null,T.today=Date.now(),T.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",T.userDateFormat=s.DATE_FORMAT,T.$onDestroy=w,T.canRemoveAttachment=A,T.canSubmit=d,T.canUploadMore=f,T.formatDateTime=m,T.getAuthorName=p,T.getFilesAmount=h,T.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",T),b(),a.all([C(),q()]).then(y).finally(function(){T.filesLoaded=!0})}(),T}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(T(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function R(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function T(t){var n=U.filters.leaveRequest;return{contact_id:x(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function E(e,t,n,a){d.openModal.apply(d,arguments)}function x(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=E,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),S(),R(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return R(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),T(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&T(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){T(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){E[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return E[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function R(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){T("from",!0)})):r.resolve()}function T(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=E[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){T("from",!0)}):r.resolve()}var E={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(R)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){ -e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),E())})})}function D(){u.isMode("view")||(C(),A(),P())}function R(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),E(),B()}function T(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:E(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function E(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function x(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),E(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){R(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=T,u.updateExpiryDate=N,function(){x(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return xe.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return xe.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function T(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||R())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function E(){Me.errors=[]}function x(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Se,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function G(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Te.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Re++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){xe.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(Ee="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ee="admin")}).then(function(){return"staff"===Ee&&u(_.permissions.ssp.manage).then(function(e){e&&(Ee="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ee===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Se=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():x()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(xe.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Re&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Re>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Te.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Re=0,Se={},Te=[],Oe="",Ie="No entitlement",Ee="",xe=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=S,Me.canSubmit=T,Me.closeAlert=E,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=G,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n, -leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(R)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function R(){E.selectedMonths=[n().month()]}function S(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){S().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function S(){return Y.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return L(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&S())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=M,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<", +absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(T,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],T=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function T(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),T(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){ +return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||T())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function G(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Te=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=G,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0), +templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 5211729e001..646ecfac622 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in T)B(T[o])&&(t[o]=T[o](t,T.$delegates[o]));return P[n]=t,!t[S]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?T:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function S(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function T(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:T(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=S(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,T(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||S()})}function h(e){E.injectMonths=!0,O("injected").then(function(){S(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(T)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function S(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function T(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){R().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function S(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[S(u.statusNames.approved),S(u.statusNames.adminApproved),S(u.statusNames.awaitingApproval),S(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:T()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return M(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==T().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=L,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{ -getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function S(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function T(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),S(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(T).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function f(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){T[e.label]=t})})).catch(function(){T=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(S,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],S=[],T={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,R.canSubmit=d,R.canUploadMore=f,R.formatDateTime=m,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(R(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function S(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function T(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function R(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:M(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function M(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),T(),S(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return S(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function S(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function T(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=T} -n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(S)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function S(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function T(){return l(),x(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){S(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=T,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Te.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||S())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Te,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Se++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Te[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Te=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Se&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Se>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Se=0,Te={},Re=[],Oe="",Ie="No entitlement",xe="",Ee=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=T,Le.canSubmit=R,Le.closeAlert=x,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s, -forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?S:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,f){function m(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){I=a("LeaveCalendar"+t.capitalize(x)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(m).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return I.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function A(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(w).then("period"===e?m:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){x=E.roleOverride}):r.all([f(i.permissions.admin.administer),f(i.permissions.ssp.manage)]).then(function(e){x=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var I,x,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){R().then(p).then(v).then(w).then(b).then(function(){return r.all([q(),A()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return L(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=M,Y.contactsList=m,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?", +copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function f(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(T,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],T=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,R.canSubmit=d,R.canUploadMore=f,R.formatDateTime=m,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(R(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function T(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function S(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function R(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),S(),T(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l, +s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),x(),B()}function R(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||T())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Se,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function G(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Se=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Te=0,Se={},Re=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=S,Me.canSubmit=R,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=G,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0), +templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 51b5033925d..16802c581eb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],w={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(w,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(w,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(D.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!D[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return D[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=D;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=D;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function D(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function w(){return l.all()}function C(){return r.all([y(),w(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function D(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function P(e){ -e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=P,function(){R().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),C()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:C(n,"toil"),isRequested:D(n),isAM:w("half_day_am",n,e.date),isPM:w("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function w(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function C(e,t){return e.request_type===t}function A(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function D(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([x(),O()]).then(I).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function x(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function I(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return M(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=L,Y.contactsList=f,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=w[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(w,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:w[e].label,isDirectAction:w[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,w={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function w(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function C(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function D(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():C()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=w(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(w(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(w(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=w,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(D).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function w(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function C(e){return!e.attachment_id||R.canManage}function A(){e.forEach(T,function(e){e()})}function D(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],T=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=C,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([w(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(t){var n=e.find(G.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function g(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):G.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){G.absencePeriods=e.sortBy(t,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){G.absenceTypes=t,G.absenceTypesIndexed=e.indexBy(t,"id")})}function w(){return S("approved",{status_id:W(m.statusNames.approved)})}function C(){var t={contact_id:G.contactId,period_id:G.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id -},G.entitlements).then(function(){return k(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),T({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){G.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function T(t){return u.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return T(t).then(function(t){G.sections[e].data=t.list})}function R(){return n.all(Object.values(G.sections).filter(function(e){return e.open}).map(E))}function O(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function I(){return S("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){G.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(G.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(G.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=G.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){G.loading.content=!0,n.all([A(),C()]).then(M).then(function(){G.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=G.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(G.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:w},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=_,G.refresh=U,G.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){G.loading.page=!1}).then(function(){return n.all([A(),C()])}).then(M).then(function(){G.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return C(s.uiOptions.fromDate,"from").then(function(){return C(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(D)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),w(e)})}function w(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function C(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return C(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return D(e).then(function(){R(e,!0)})})}function D(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),D("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?D("from").then(function(){R("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function w(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function C(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function P(){u.isMode("view")||(w(),C(),D())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),I(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,w){function C(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(C)}function D(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||T())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return w.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function G(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",we),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:De.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=me(De.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function we(){Re.forEach(function(e){e()})}function Ce(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var De,Pe={},Te=0,Se={},Re=[],Oe="",xe="No entitlement",Ie="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=R,Le.closeAlert=I,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=G,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ce,function(){Le.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new Y.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=Y.type(i)||a(Y.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new Y.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}Y=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+G(n):(n=t.$eval(n),F(n)?e+G(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,G=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var Y;b.prototype.concat=function(e,t){var n={caseInsensitive:Y.caseInsensitive(),strict:Y.strictMode(),squash:Y.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(e){v.lookupContacts=e}).then(function(){return"me"!==e?u():a.resolve(null)}).then(function(e){return v.contactIdsToReduceTo=e,l()}).then(function(e){return e})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/angular","common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n,a){function r(a,r,o,s,i,u,c,l,d,m){function f(){for(var e=[],t=n(E.selectedPeriod.start_date).clone().startOf("month"),a=n(E.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(P(t)),t.add(1,"month");E.months=e}function p(){s.$new().$watch(function(){return E.selectedMonths},function(t,n){null===n||e.equals(t,n)||T()})}function h(e){E.injectMonths=!0,O("injected").then(function(){T(e)}).then(function(){E.loading.calendar=!1})}function v(){x=a("LeaveCalendar"+t.capitalize(I)+"Controller").init(E)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return u.all().then(function(e){E.absencePeriods=t.sortBy(e,"start_date"),E.selectedPeriod=t.find(E.absencePeriods,function(e){return!!e.current})}).then(f).then(S)}function y(){return c.all().then(c.loadCalculationUnits)}function _(){return d.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return x.loadContacts().then(function(e){E.contacts=e})}function $(){return d.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){E.filters.optionValues.regions=e.hrjc_region,E.filters.optionValues.locations=e.hrjc_location,E.filters.optionValues.levelTypes=e.hrjc_level_type,E.filters.optionValues.departments=e.hrjc_department})}function C(){return l.all()}function w(){return r.all([y(),C(),_()]).then(function(e){E.supportData.absenceTypes=e[0],E.supportData.publicHolidays=e[1],E.supportData.calculationUnits=e[2].hrleaveandabsences_absence_type_calculation_unit,E.supportData.dayTypes=e[2].hrleaveandabsences_leave_request_day_type,E.supportData.leaveRequestStatuses=e[2].hrleaveandabsences_leave_request_status,E.supportData.toilAmounts=t.indexBy(e[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=r.resolve();return E.injectMonths&&(e=O("destroyed"),E.injectMonths=!1),e}function P(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),shortName:e.format("MMM")}}function D(e){ +e=t.includes(["contacts","period"],e)?e:"period",r.resolve().then(function(){E.loading.calendar=!0}).then(A).then("period"===e?f:t.noop).then("contacts"===e?q:t.noop).then(function(){h("contacts"===e)})}function T(e){var n=E.selectedMonths.length?E.months.filter(function(e){return t.includes(E.selectedMonths,e.index)}):E.months;s.$emit("LeaveCalendar::showMonths",n,!!e)}function S(){E.selectedMonths=[n().month()]}function R(){return E.roleOverride?r.resolve().then(function(){I=E.roleOverride}):r.all([m(i.permissions.admin.administer),m(i.permissions.ssp.manage)]).then(function(e){I=e[0]?"admin":e[1]?"manager":"staff"})}function O(e){return r(function(n){var a=0,r=s.$on("LeaveCalendar::month"+t.capitalize(e),function(){++a===E.months.length&&(r(),n())})})}o.debug("Component: leave-calendar");var x,I,E=this;E.absencePeriods=[],E.contacts=[],E.contactIdsToReduceTo=null,E.injectMonths=!1,E.months=[],E.selectedMonths=null,E.selectedPeriod=null,E.showContactName=!1,E.showFilters=!1,E.supportData={},E.loading={calendar:!0,page:!0},E.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},E.labelPeriod=g,E.refresh=D,function(){R().then(p).then(v).then(A).then(b).then(function(){return r.all([q(),w()])}).then(function(){return E.showFilters?$():t.noop}).then(function(){h()}).then(function(){E.loading.page=!1})}()}a.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",r]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(Y.period.start_date)&&r.isSameOrBefore(Y.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return Y.showOnlyWithLeaveRequests?Y.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):Y.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:w(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){Y.supportData.dayTypes=e.indexBy(Y.supportData.dayTypes,"name"),Y.supportData.leaveRequestStatuses=e.indexBy(Y.supportData.leaveRequestStatuses,"value"),Y.supportData.publicHolidays=e.transform(Y.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonths",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=Y.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!Y.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=Y.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===Y.month.index&&r.year()===Y.month.year&&a.push(e.find(Y.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(Y.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function R(){return Y.month.loading=!0,a.all([x(),O()]).then(I).then(k).then(function(){H=!0,Y.month.loading=!1})}function O(){return s.all({from_date:{to:Y.month.days[Y.month.days.length-1].date+" 23:59:59"},to_date:{from:Y.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:Y.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(Y.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function x(){var t=Y.month.days[0].date,n=Y.month.days[Y.month.days.length-1].date;return o.get(Y.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function I(){return Y.contactIdsToReduceTo&&(Y.contacts=Y.contacts.filter(function(t){return e.includes(Y.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(Y.month.days.map(function(e){return a.all(Y.contacts.map(function(t){return L(e,t.id)}))}))}function j(t,n,a){!e.find(n,function(e){return e.index===Y.month.index})?Y.visible=!1:(Y.currentPage=0,Y.visible=!0,(a||!H)&&R())}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(Y.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},G={},Y=this;Y.currentPage=0,Y.pageSize=20,Y.visible=!1,Y.showContactName=!!Y.showContactName,Y.showOnlyWithLeaveRequests=!!Y.showOnlyWithLeaveRequests,Y.$onDestroy=M,Y.contactsList=f,Y.getContactUrl=b,function(){var e=t().month(Y.month.index).year(Y.month.year);_(),$(),Y.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(Y(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return Y(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(Y).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),Y()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),Y(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function G(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function Y(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return G(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&Y).then(_).then(k)}function K(e){return te.absenceTypes=e,G(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=O,te.isLeaveType=x,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=Y,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(Y)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(T,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],T=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(t){var n=e.find(G.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function g(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):G.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){G.absencePeriods=e.sortBy(t,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){G.absenceTypes=t,G.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:G.contactId,period_id:G.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id], +pending:e[3][t.id]}})})}function A(){return i.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return k(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),T({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){G.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function T(t){return u.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return T(t).then(function(t){G.sections[e].data=t.list})}function R(){return n.all(Object.values(G.sections).filter(function(e){return e.open}).map(E))}function O(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function I(){return S("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function M(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){G.leaveRequestStatuses=e.indexBy(t,"value")})}function L(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(G.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(G.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=G.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){G.loading.content=!0,n.all([A(),w()]).then(L).then(function(){G.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=G.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(G.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=_,G.refresh=U,G.toggleSection=H,function(){n.all([M(),$(),q()]).then(function(){G.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(L).then(function(){G.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function D(){u.isMode("view")||(C(),w(),P())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),I(),B()}function R(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function O(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||T())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function x(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Se,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function G(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function Y(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?f.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?f.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?f.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Me.absenceTypes=me(Pe.types,e),!Me.absenceTypes.length)return r.reject(xe)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Se=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),A(),Me.request.isValid().then(ee()&&x).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?Ae():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Te=0,Se={},Re=[],Oe="",xe="No entitlement",Ie="",Ee=[],Me=n.assign(this,m);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=S,Me.canSubmit=R,Me.closeAlert=I,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=G,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=we,function(){Me.loading.absenceTypes=!0,Y(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM), define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 7cc5e9b9eb8..1e68cb7672b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -20,12 +20,12 @@ define([ var vm = this; vm.legendCollapsed = true; - vm.other_badges = [ - { label: 'AM', hint: 'AM Only' }, - { label: 'PM', hint: 'PM Only' }, - { label: 'HH:MM', hint: 'Time', type: 'hours' }, - { label: '', hint: 'Requested', type: 'requested' }, - { label: 'AT', hint: 'Accrued TOIL' } + vm.otherBadges = [ + { label: 'AM', description: 'AM Only' }, + { label: 'PM', description: 'PM Only' }, + { label: 'HH:MM', description: 'Time', cssClassSuffix: 'hours' }, + { label: '', description: 'Requested', cssClassSuffix: 'requested' }, + { label: 'AT', description: 'Accrued TOIL' } ]; vm.getAbsenceTypeStyle = getAbsenceTypeStyle; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index d83d75832ff..3e9db6cf3a7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -30,12 +30,14 @@ define([ }); it('has a list of "other" badges', function () { - expect(controller.other_badges).toEqual(jasmine.any(Array)); - expect(controller.other_badges[0]).toEqual(jasmine.objectContaining({ + expect(controller.otherBadges).toEqual(jasmine.objectContaining([{ label: jasmine.any(String), - hint: jasmine.any(String) - })); - expect(controller.other_badges.length).toBe(5); + description: jasmine.any(String) + }])); + }); + + it('has a total of 5 "other" badges', function () { + expect(controller.otherBadges.length).toBe(5); }); describe('getAbsenceTypeStyle()', function () { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index d9ad3e5fad7..63acfd2c308 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -1,6 +1,6 @@ $chr-leave-calendar-cell-height: 35px; $chr-leave-calendar-cell-font-size: 10px; -$chr-leave-calendar-item-requested-border-color: #c7cbd0; +$chr-leave-calendar-item-weekend-background-color: #c7cbd0; $chr-leave-calendar-item-requested-border-height: 0.5em; $chr-leave-calendar-legend-header-top-margin: 20px; $chr-leave-calendar-legend-badge-border-radius: 2px; @@ -11,6 +11,18 @@ $chr-leave-calendar-legend-badge-square-right-margin: 20px; $chr-leave-calendar-legend-badge-square-font-size: 12px; $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; +.chr_leave-calendar__admin-filters-hint { + display: inline-block; + font-size: 20px; + vertical-align: middle; +} + +.chr_leave-calendar__admin-filters-select { + display: inline-block; + margin-right: 20px; + width: calc(100% - 50px); +} + .chr_leave-calendar__dates-container { overflow-x: auto; @@ -21,12 +33,6 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; } } -.chr_leave-calendar__names-container { - .chr_leave-calendar { - table-layout: fixed; - } -} - .chr_leave-calendar__day { font-size: $chr-leave-calendar-cell-font-size !important; line-height: 1.4em !important; @@ -46,6 +52,21 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; color: $brand-primary !important; } +.chr_leave-calendar__day-container--type--non-working { + background-color: #41afcb; +} + +.chr_leave-calendar__day-container--type--public-holiday { + background-color: #8ec68a; +} + +.chr_leave-calendar__day-container--type--weekend { + background-color: $chr-leave-calendar-item-weekend-background-color; +} + +.chr_leave-calendar__day-container { + height: 100%; +} .chr_leave-calendar__item { color: #fff; @@ -103,21 +124,9 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; border-color: #eca67e; } -.chr_leave-calendar__day-container--type--non-working { - background-color: #41afcb; -} - -.chr_leave-calendar__day-container--type--public-holiday { - background-color: #8ec68a; -} - -.chr_leave-calendar__day-container--type--weekend { - background-color: #c7cbd0; -} - .chr_leave-calendar__item--alt { background-color: #fff !important; - border: 1px solid transparent; + border: 2px solid transparent; color: $gray-darker; } @@ -125,7 +134,8 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; @include striped-background(rgba(255, 255, 255, 0.3)); &.chr_leave-calendar__item--alt { - @include striped-background(rgba(0, 0, 0, 0.1)); + @include striped-background($crm-white); + background-color: $crm-grayblue-dark !important; } } @@ -145,8 +155,68 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; } } -.chr_leave-calendar__day-container { - height: 100%; +.chr_leave-calendar__legend__title { + font-size: $font-size-small; +} + +.chr_leave-calendar__legend__header:not(:first-child) { + margin-top: $chr-leave-calendar-legend-header-top-margin; +} + +.chr_leave-calendar__legend__type-badge, +.chr_leave-calendar__legend__other-badge-wrapper { + float: left; + line-height: $chr-leave-calendar-legend-badge-size; + margin-top: $chr-leave-calendar-legend-badge-margin; + white-space: nowrap; +} + +.chr_leave-calendar__legend__other-badge-wrapper { + margin-right: $chr-leave-calendar-legend-badge-square-right-margin; +} + +.chr_leave-calendar__legend__type-badge, +.chr_leave-calendar__legend__other-badge { + color: $gray-dark; + height: $chr-leave-calendar-legend-badge-size; +} + +.chr_leave-calendar__legend__type-badge { + border-radius: $chr-leave-calendar-legend-badge-border-radius; + color: $crm-white; + margin-right: $chr-leave-calendar-legend-badge-margin; + margin-top: 10px; + padding: $chr-leave-calendar-legend-badge-padding; +} + +.chr_leave-calendar__legend__other-badge { + border: solid 1px $crm-grayblue-dark; + border-radius: $chr-leave-calendar-legend-badge-border-radius; + float: left; + font-size: $chr-leave-calendar-legend-badge-square-font-size; + font-weight: 600; + margin-right: $chr-leave-calendar-legend-badge-margin; + text-align: center; + width: $chr-leave-calendar-legend-badge-size; + + &.chr_leave-calendar__legend__other-badge-hours { + font-size: $chr-leave-calendar-legend-badge-square-hours-font-size; + font-weight: $badge-font-weight; + } + + &.chr_leave-calendar__legend__other-badge-requested { + @include striped-background(rgba(255, 255, 255, 0.6)); + background-color: $crm-grayblue-dark !important; + border: 0; + } +} + +.chr_leave-calendar__month-container { + margin: 0; + + > div { + padding: 0; + } } .chr_leave-calendar__month-header { @@ -179,6 +249,12 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; vertical-align: middle !important; } +.chr_leave-calendar__names-container { + .chr_leave-calendar { + table-layout: fixed; + } +} + .chr_leave-calendar__pagination { font-size: $chr-leave-calendar-cell-font-size; text-align: center; @@ -218,79 +294,3 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; padding-right: 3px !important; } } - -.chr_leave-calendar__month-container { - margin: 0; - - > div { - padding: 0; - } -} - -.chr_leave-calendar__admin-filters-hint { - display: inline-block; - font-size: 20px; - vertical-align: middle; -} - -.chr_leave-calendar__admin-filters-select { - display: inline-block; - margin-right: 20px; - width: calc(100% - 50px); -} - -// Legend - -.chr_leave-calendar__legend__title { - font-size: $font-size-small; -} - -.chr_leave-calendar__legend__header:not(:first-child) { - margin-top: $chr-leave-calendar-legend-header-top-margin; -} - -.chr_leave-calendar__legend__type-badge, -.chr_leave-calendar__legend__other-badge-wrapper { - float: left; - line-height: $chr-leave-calendar-legend-badge-size; - margin-top: $chr-leave-calendar-legend-badge-margin; - white-space: nowrap; -} - -.chr_leave-calendar__legend__other-badge-wrapper { - margin-right: $chr-leave-calendar-legend-badge-square-right-margin; -} - -.chr_leave-calendar__legend__type-badge, -.chr_leave-calendar__legend__other-badge { - color: $gray-dark; - height: $chr-leave-calendar-legend-badge-size; -} - -.chr_leave-calendar__legend__type-badge { - border-radius: $chr-leave-calendar-legend-badge-border-radius; - color: $crm-white; - margin-right: $chr-leave-calendar-legend-badge-margin; - margin-top: 10px; - padding: $chr-leave-calendar-legend-badge-padding; -} - -.chr_leave-calendar__legend__other-badge { - border: solid 1px $crm-grayblue-dark; - border-radius: $chr-leave-calendar-legend-badge-border-radius; - float: left; - font-size: $chr-leave-calendar-legend-badge-square-font-size; - font-weight: 600; - margin-right: $chr-leave-calendar-legend-badge-margin; - text-align: center; - width: $chr-leave-calendar-legend-badge-size; - - &.chr_leave-calendar__legend__other-badge-hours { - font-size: $chr-leave-calendar-legend-badge-square-hours-font-size; - font-weight: $badge-font-weight; - } - - &.chr_leave-calendar__legend__other-badge-requested { - @include striped-background($crm-grayblue-dark); - } -} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss index f55bfe0b86a..74a24ddf024 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/mixins/_gradients.scss @@ -1,3 +1,3 @@ @mixin striped-background($stripe-color) { - background: repeating-linear-gradient(45deg, $stripe-color, $stripe-color 2px, transparent 2px, transparent 7px); + background: repeating-linear-gradient(45deg, $stripe-color, $stripe-color 5px, transparent 5px, transparent 7px); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index 089cd55e23a..a3d14c0a9ce 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -19,12 +19,12 @@

    Other
    -
    + {{otherBadge.cssClassSuffix ? 'chr_leave-calendar__legend__other-badge-' + otherBadge.cssClassSuffix : ''}}"> {{otherBadge.label}}
    - {{otherBadge.hint}} + {{otherBadge.description}}

    From 9d4caddab01cd6b9181659fb3107b5d85f41b847 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 16 May 2018 10:42:35 +0100 Subject: [PATCH 124/251] PCHR-3520: Fix tests --- .../test/shared/components/leave-calendar.component.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index 013cf4c6b0e..033a9be1835 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -11,6 +11,7 @@ 'leave-absences/mocks/data/option-group.data', 'leave-absences/mocks/data/public-holiday.data', 'common/mocks/services/api/contact-mock', + 'common/mocks/services/api/contract-mock', 'leave-absences/mocks/apis/absence-period-api-mock', 'leave-absences/mocks/apis/absence-type-api-mock', 'leave-absences/mocks/apis/public-holiday-api-mock', From fc950fc4a484f4e2e587d8f8b09b8e46bc16a217 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 16 May 2018 17:45:46 +0100 Subject: [PATCH 125/251] PCHR-3520: Load only one month in components --- .../leave-calendar-month.component.js | 28 ++---- .../components/leave-calendar.component.js | 90 +++++++++--------- .../leave-calendar-month.component.spec.js | 54 +++-------- .../leave-calendar.component.spec.js | 93 ++++--------------- .../shared/components/leave-calendar.html | 34 ++++--- 5 files changed, 107 insertions(+), 192 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index 531b28cacdc..26a63200d4d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -46,7 +46,7 @@ define([ vm.getContactUrl = getContactUrl; (function init () { - var dateFromMonth = moment().month(vm.month.index).year(vm.month.year); + var dateFromMonth = moment().month(vm.month.month).year(vm.month.year); indexData(); initListeners(); @@ -74,7 +74,8 @@ define([ */ function buildMonthStructure (dateMoment) { return { - index: dateMoment.month(), + index: dateMoment.year() + '-' + dateMoment.month(), + month: dateMoment.month(), year: dateMoment.year(), name: dateMoment.format('MMMM'), loading: true, @@ -269,7 +270,7 @@ define([ * Initializes the event listeners */ function initListeners () { - eventListeners.push($rootScope.$on('LeaveCalendar::showMonths', showMonthIfInList)); + eventListeners.push($rootScope.$on('LeaveCalendar::showMonth', showMonth)); eventListeners.push(pubSub.subscribe('LeaveRequest::new', addLeaveRequest)); eventListeners.push(pubSub.subscribe('LeaveRequest::edit', updateLeaveRequest)); eventListeners.push(pubSub.subscribe('LeaveRequest::updatedByManager', updateLeaveRequest)); @@ -355,7 +356,7 @@ define([ while (pointerDate.isSameOrBefore(toDate)) { // Ensure that pointerDate is in same month/year that component represents - if (pointerDate.month() === vm.month.index && pointerDate.year() === vm.month.year) { + if (pointerDate.month() === vm.month.month && pointerDate.year() === vm.month.year) { days.push(_.find(vm.month.days, function (day) { return day.date === pointerDate.format('YYYY-MM-DD'); })); @@ -561,22 +562,13 @@ define([ /** * Show the month and its data if it's included in the given list * - * @param {Array} monthsToShow - * @param {Boolean} forceReload If true it forces the reload of the data + * @param {Boolean} forceReload If true it forces the reload of the data */ - function showMonthIfInList (__, monthsToShow, forceReload) { - var isIncluded = !!_.find(monthsToShow, function (month) { - return month.index === vm.month.index; - }); - - if (isIncluded) { - vm.currentPage = 0; - vm.visible = true; + function showMonth (__, forceReload) { + vm.currentPage = 0; + vm.visible = true; - (forceReload || !dataLoaded) && loadMonthData(); - } else { - vm.visible = false; - } + (forceReload || !dataLoaded) && loadMonthData(); } function sortLeaveRequests (leaveRequests) { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index af8e8ffab11..d9514b4b7f1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -1,14 +1,13 @@ /* eslint-env amd */ define([ - 'common/angular', 'common/lodash', 'common/moment', 'leave-absences/shared/modules/components', 'leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller', 'leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller', 'leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller' -], function (angular, _, moment, components) { +], function (_, moment, components) { components.component('leaveCalendar', { bindings: { contactId: '<', @@ -33,9 +32,10 @@ define([ vm.absencePeriods = []; vm.contacts = []; vm.contactIdsToReduceTo = null; - vm.injectMonths = false; + vm.injectMonth = false; vm.months = []; - vm.selectedMonths = null; + vm.selectedMonth = {}; + vm.selectedMonthIndex = ''; vm.selectedPeriod = null; vm.showContactName = false; vm.showFilters = false; @@ -60,7 +60,7 @@ define([ setUserRole() .then(initWatchers) .then(injectSubController) - .then(makeSureMonthsAreNotInjected) + .then(makeSureMonthIsNotInjected) .then(loadAbsencePeriods) .then(function () { return $q.all([ @@ -72,7 +72,7 @@ define([ return vm.showFilters ? loadFiltersOptionValues() : _.noop; }) .then(function () { - injectAndShowMonths(); + injectAndShowMonth(); }) .then(function () { vm.loading.page = false; @@ -100,25 +100,25 @@ define([ */ function initWatchers () { $rootScope.$new().$watch(function () { - return vm.selectedMonths; + return vm.selectedMonthIndex; }, function (newValue, oldValue) { - if (oldValue !== null && !angular.equals(newValue, oldValue)) { - sendShowMonthsSignal(); + if (oldValue !== null && newValue !== oldValue) { + setSelectedMonth(); + sendShowMonthSignal(); } }); } /** - * Injects the leave-calendar-month components - * and sends the "show months" signal + * Injects the leave-calendar-month component and sends the "show month" signal * - * @param {Boolean} forceDataReload whether the months need to force data reload + * @param {Boolean} forceDataReload whether the month needs a force data reload */ - function injectAndShowMonths (forceDataReload) { - vm.injectMonths = true; + function injectAndShowMonth (forceDataReload) { + vm.injectMonth = true; - waitUntilMonthsAre('injected').then(function () { - sendShowMonthsSignal(forceDataReload); + waitUntilMonthIs('injected').then(function () { + sendShowMonthSignal(forceDataReload); }).then(function () { vm.loading.calendar = false; }); @@ -155,7 +155,7 @@ define([ }); }) .then(buildPeriodMonthsList) - .then(setDefaultMonths); + .then(setDefaultMonth); } /** @@ -242,17 +242,17 @@ define([ } /** - * If the months are already injected, it removes then and then wait - * for their components to confirme that they are destroyed + * If a month is already injected, it removes it and then waits + * for its component to confirm that it is destroyed * * @return {Promise} */ - function makeSureMonthsAreNotInjected () { + function makeSureMonthIsNotInjected () { var promise = $q.resolve(); - if (vm.injectMonths) { - promise = waitUntilMonthsAre('destroyed'); - vm.injectMonths = false; + if (vm.injectMonth) { + promise = waitUntilMonthIs('destroyed'); + vm.injectMonth = false; } return promise; @@ -266,15 +266,15 @@ define([ */ function monthStructure (dateMoment) { return { - index: dateMoment.month(), + index: dateMoment.year() + '-' + dateMoment.month(), + month: dateMoment.month(), year: dateMoment.year(), - name: dateMoment.format('MMMM'), - shortName: dateMoment.format('MMM') + name: dateMoment.format('MMMM') }; } /** - * Reloads the selected months data + * Reloads the selected month's data * * If the source of the refresh is a period change, then * it rebuilds the months list as well @@ -290,11 +290,11 @@ define([ .then(function () { vm.loading.calendar = true; }) - .then(makeSureMonthsAreNotInjected) + .then(makeSureMonthIsNotInjected) .then(source === 'period' ? buildPeriodMonthsList : _.noop) .then(source === 'contacts' ? loadContacts : _.noop) .then(function () { - injectAndShowMonths((source === 'contacts')); + injectAndShowMonth((source === 'contacts')); }); } @@ -304,21 +304,24 @@ define([ * @param {Boolean} forceDataReload if true, then a month will load its data * regardless if it had already loaded it */ - function sendShowMonthsSignal (forceDataReload) { - var monthsToShow = !vm.selectedMonths.length - ? vm.months - : vm.months.filter(function (month) { - return _.includes(vm.selectedMonths, month.index); - }); + function sendShowMonthSignal (forceDataReload) { + $rootScope.$emit('LeaveCalendar::showMonth', !!forceDataReload); + } + + /** + * Sets the month that is to be selected by default + */ + function setDefaultMonth () { + vm.selectedMonthIndex = moment().year() + '-' + moment().month(); - $rootScope.$emit('LeaveCalendar::showMonths', monthsToShow, !!forceDataReload); + setSelectedMonth(); } /** - * Sets the months that are to be selected by default + * Sets the month that is was selected */ - function setDefaultMonths () { - vm.selectedMonths = [moment().month()]; + function setSelectedMonth () { + vm.selectedMonth = _.find(vm.months, { index: vm.selectedMonthIndex }); } /** @@ -346,14 +349,11 @@ define([ * * @return {Promise} */ - function waitUntilMonthsAre (status) { + function waitUntilMonthIs (status) { return $q(function (resolve) { - var monthLoadedCounter = 0; var removeListener = $rootScope.$on('LeaveCalendar::month' + _.capitalize(status), function () { - if (++monthLoadedCounter === vm.months.length) { - removeListener(); - resolve(); - } + removeListener(); + resolve(); }); }); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index 0d0dc9af62d..d2ef19d37e0 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -47,8 +47,8 @@ LeaveRequest = _LeaveRequest_; OptionGroup = _OptionGroup_; - february = { index: 1, year: 2016 }; - daysInFebruary = moment().month(february.index).year(february.year).daysInMonth(); + february = { index: '2016-1', month: 1, year: 2016 }; + daysInFebruary = moment().month(february.month).year(february.year).daysInMonth(); period2016 = _.clone(AbsencePeriodData.all().values[0]); publicHolidays = PublicHolidayData.all().values; leaveRequestInFebruary = LeaveRequestData.all().values[0]; @@ -104,7 +104,7 @@ describe('on "show months" event', function () { describe('when it is included in the list of months to show', function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('shows itself', function () { @@ -188,7 +188,7 @@ contactIdsToReduceTo = randomContactIds; compileComponent(); - sendShowMonthsSignal(); + sendShowMonthSignal(); $rootScope.$digest(); }); @@ -203,7 +203,7 @@ contactIdsToReduceTo = null; compileComponent(); - sendShowMonthsSignal(); + sendShowMonthSignal(); $rootScope.$digest(); }); @@ -217,7 +217,7 @@ beforeEach(function () { controller.currentPage = 5; - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('resets it to 0', function () { @@ -230,7 +230,7 @@ Calendar.get.calls.reset(); LeaveRequest.all.calls.reset(); - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('does not fetch the data again', function () { @@ -244,7 +244,7 @@ Calendar.get.calls.reset(); LeaveRequest.all.calls.reset(); - sendShowMonthsSignal(true, true); + sendShowMonthSignal(true, true); }); it('fetches the data again', function () { @@ -253,24 +253,6 @@ }); }); }); - - describe('when it is not included in the list of months to show', function () { - beforeEach(function () { - sendShowMonthsSignal(false); - }); - - it('hides itself', function () { - expect(controller.visible).toBe(false); - }); - - it("does not load the contacts' work pattern calendars", function () { - expect(Calendar.get).not.toHaveBeenCalled(); - }); - - it("does not load the contacts' leave requests", function () { - expect(LeaveRequest.all).not.toHaveBeenCalled(); - }); - }); }); describe('month structure', function () { @@ -402,7 +384,7 @@ describe("day's data specific for each contact", function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); it('is indexed by contact id', function () { @@ -652,7 +634,7 @@ describe('event listeners', function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); describe('when a leave request is deleted', function () { @@ -838,7 +820,7 @@ describe('contactsList()', function () { beforeEach(function () { - sendShowMonthsSignal(); + sendShowMonthSignal(); }); describe('when show-only-with-leave-requests is set to false', function () { @@ -954,7 +936,7 @@ contactIdsToReduceTo: contactIdsToReduceTo }); - !!sendSignal && sendShowMonthsSignal(); + !!sendSignal && sendShowMonthSignal(); } /** @@ -973,18 +955,12 @@ /** * Sends the "show months" signal to the component * - * @param {Boolean} includeFebruary Whether to include Feb (the current month) - * @param {Boolean} forceReload Whether to force reloading the month's data + * @param {Boolean} forceReload Whether to force reloading the month's data */ - function sendShowMonthsSignal (includeFebruary, forceReload) { - var selectedMonths = [{ index: 11, year: 2016 }]; - - includeFebruary = typeof includeFebruary === 'undefined' ? true : !!includeFebruary; + function sendShowMonthSignal (forceReload) { forceReload = typeof forceReload === 'undefined' ? false : !!forceReload; - includeFebruary && selectedMonths.push(february); - - $rootScope.$emit('LeaveCalendar::showMonths', selectedMonths, forceReload); + $rootScope.$emit('LeaveCalendar::showMonth', forceReload); $rootScope.$digest(); } }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index 033a9be1835..d349178ead5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -70,6 +70,7 @@ sharedSettings = _sharedSettings_; notification = _notificationService_; + spyOn(window, 'alert'); spyOn($log, 'debug'); spyOn($rootScope, '$emit').and.callThrough(); spyOn(AbsencePeriod, 'all'); @@ -410,14 +411,15 @@ var periodStartDate = moment(controller.selectedPeriod.start_date); var periodEndDate = moment(controller.selectedPeriod.end_date); - expect(months[0].index).toEqual(periodStartDate.month()); + expect(months[0].month).toEqual(periodStartDate.month()); expect(months[0].year).toEqual(periodStartDate.year()); - expect(months[months.length - 1].index).toEqual(periodEndDate.month()); + expect(months[months.length - 1].month).toEqual(periodEndDate.month()); expect(months[months.length - 1].year).toEqual(periodEndDate.year()); }); it('selects the current month', function () { - expect(controller.selectedMonths).toEqual([moment().month()]); + expect(controller.selectedMonth).toEqual(_.find(controller.months, + { index: moment().year() + '-' + moment().month() })); }); }); @@ -471,30 +473,13 @@ controller.injectMonths = true; }); - describe('when it has not yet received the "month injected" event from all the months', function () { + describe('when it has received the "month injected" event from the month', function () { beforeEach(function () { - simulateMonthsWithSignal('injected', 2); - }); - - it('does not send the event', function () { - expect($rootScope.$emit).not.toHaveBeenCalled(); - }); - }); - - describe('when it has received the "month injected" event from all the months', function () { - beforeEach(function () { - simulateMonthsWithSignal('injected', controller.months.length); + simulateMonthWithSignal('injected'); }); it('sends the event', function () { - expect($rootScope.$emit).toHaveBeenCalled(); - expect($rootScope.$emit.calls.mostRecent().args[0]).toBe('LeaveCalendar::showMonths'); - }); - - it('attaches to the event only the currently selected months', function () { - expect($rootScope.$emit.calls.mostRecent().args[1]).toEqual(controller.months.filter(function (month) { - return _.includes(controller.selectedMonths, month.index); - })); + expect($rootScope.$emit.calls.mostRecent().args[0]).toBe('LeaveCalendar::showMonth'); }); }); }); @@ -511,43 +496,10 @@ controller.refresh('contacts'); $rootScope.$digest(); - simulateMonthsWithSignal('destroyed', controller.months.length); + simulateMonthWithSignal('destroyed', controller.months.length); } }); - describe('selected months watcher', function () { - describe('when some other months are selected', function () { - beforeEach(function () { - controller.selectedMonths = [1, 2, 3]; - $rootScope.$digest(); - }); - - it('sends the "show months" event with the newly selected months', function () { - expect($rootScope.$emit).toHaveBeenCalledWith( - 'LeaveCalendar::showMonths', - controller.months.filter(function (month) { - return _.includes([1, 2, 3], month.index); - }), - jasmine.any(Boolean) - ); - }); - }); - - describe('when none of the months are selected', function () { - beforeEach(function () { - controller.selectedMonths = []; - $rootScope.$digest(); - }); - - it('sends the "show months" event with the all the months', function () { - expect($rootScope.$emit).toHaveBeenCalledWith( - 'LeaveCalendar::showMonths', - controller.months, - jasmine.any(Boolean)); - }); - }); - }); - describe('labelPeriod()', function () { var label, period; @@ -611,8 +563,8 @@ controller.refresh('period'); $rootScope.$digest(); - simulateMonthsWithSignal('destroyed', controller.months.length); - simulateMonthsWithSignal('injected', controller.months.length); + simulateMonthWithSignal('destroyed', controller.months.length); + simulateMonthWithSignal('injected', controller.months.length); }); it('rebuilds the months structure', function () { @@ -625,10 +577,7 @@ it('sends the "show months" signal without forcing data reload', function () { expect($rootScope.$emit).toHaveBeenCalledWith( - 'LeaveCalendar::showMonths', - jasmine.any(Array), - false - ); + 'LeaveCalendar::showMonth', false); }); }); @@ -637,8 +586,8 @@ controller.refresh('contacts'); $rootScope.$digest(); - simulateMonthsWithSignal('destroyed', controller.months.length); - simulateMonthsWithSignal('injected', controller.months.length); + simulateMonthWithSignal('destroyed', controller.months.length); + simulateMonthWithSignal('injected', controller.months.length); }); it('does not rebuild the months structure', function () { @@ -651,10 +600,7 @@ it('sends the "show months" signal with forcing data reload', function () { expect($rootScope.$emit).toHaveBeenCalledWith( - 'LeaveCalendar::showMonths', - jasmine.any(Array), - true - ); + 'LeaveCalendar::showMonth', true); }); }); }); @@ -707,13 +653,10 @@ * Simulates that the given number of months sends the given * signal to the component * - * @param {string} signal - * @param {int} numberOfMonths + * @param {String} signal */ - function simulateMonthsWithSignal (signal, numberOfMonths) { - _.times(numberOfMonths, function () { - $rootScope.$emit('LeaveCalendar::month' + _.capitalize(signal)); - }); + function simulateMonthWithSignal (signal) { + $rootScope.$emit('LeaveCalendar::month' + _.capitalize(signal)); $rootScope.$emit.calls.reset(); $rootScope.$digest(); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html index 1ec17523a13..ad5a90cf935 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html @@ -72,17 +72,21 @@
    -
    - - - {{$item.shortName}} - - - {{month.name}} - - +
    +
    + + +
    -
    +
    - @@ -111,11 +115,11 @@
    -
    - + Date: Thu, 17 May 2018 16:28:00 +0100 Subject: [PATCH 126/251] PCHR-3520: Augment the month header with paginators --- .../components/leave-calendar.component.js | 97 ++++++++++- .../leave-calendar.component.spec.js | 130 ++++++++++++++- .../scss/components/_leave-calendar.scss | 15 ++ .../components/leave-calendar-month.html | 154 +++++++++--------- .../shared/components/leave-calendar.html | 29 +++- 5 files changed, 330 insertions(+), 95 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index d9514b4b7f1..232b265619d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -52,9 +52,15 @@ define([ region: null } }; + vm.monthPaginatorsAvailability = { + previous: true, + next: true + }; vm.labelPeriod = labelPeriod; + vm.paginateMonth = paginateMonth; vm.refresh = refresh; + vm.selectCurrentMonth = selectCurrentMonth; (function init () { setUserRole() @@ -73,6 +79,7 @@ define([ }) .then(function () { injectAndShowMonth(); + setMonthPaginatorsAvailability(); }) .then(function () { vm.loading.page = false; @@ -95,6 +102,16 @@ define([ vm.months = months; } + /** + * Returns a month index in the format "YYYY-" + * + * @param {Moment} dateMoment + * @return {String} + */ + function getMonthIndex (dateMoment) { + return dateMoment.year() + '-' + dateMoment.month(); + } + /** * Initializes the scope properties' watchers */ @@ -104,6 +121,7 @@ define([ }, function (newValue, oldValue) { if (oldValue !== null && newValue !== oldValue) { setSelectedMonth(); + setMonthPaginatorsAvailability(); sendShowMonthSignal(); } }); @@ -155,7 +173,7 @@ define([ }); }) .then(buildPeriodMonthsList) - .then(setDefaultMonth); + .then(setCurrentMonth); } /** @@ -266,13 +284,30 @@ define([ */ function monthStructure (dateMoment) { return { - index: dateMoment.year() + '-' + dateMoment.month(), + index: getMonthIndex(dateMoment), month: dateMoment.month(), year: dateMoment.year(), - name: dateMoment.format('MMMM') + name: dateMoment.format('MMMM'), + moment: moment().year(dateMoment.year()).month(dateMoment.month()) }; } + /** + * Paginates the currently selected month in a specified direction + * + * @param {String} direction previous|next + */ + function paginateMonth (direction) { + var monthAction = direction === 'previous' ? 'subtract' : 'add'; + var dateFromMonth = vm.selectedMonth.moment[monthAction](1, 'month'); + + vm.selectedMonthIndex = getMonthIndex(dateFromMonth); + + setSelectedMonth(); + setMonthPaginatorsAvailability(); + refresh('month'); + } + /** * Reloads the selected month's data * @@ -281,23 +316,35 @@ define([ * If the source of the refresh is a change in contacts filters, then * it reloads the contacts as well * - * @param {string} source The source of the refresh (period or contacts change) + * @param {String} source The source of the refresh (period or contacts change) */ function refresh (source) { - source = _.includes(['contacts', 'period'], source) ? source : 'period'; + source = _.includes(['contacts', 'period', 'month'], source) ? source : 'period'; $q.resolve() - .then(function () { - vm.loading.calendar = true; - }) .then(makeSureMonthIsNotInjected) .then(source === 'period' ? buildPeriodMonthsList : _.noop) + .then(source === 'period' ? setFirstPeriodMonth : _.noop) .then(source === 'contacts' ? loadContacts : _.noop) + .then(source === 'month' ? setMonthPaginatorsAvailability : _.noop) .then(function () { injectAndShowMonth((source === 'contacts')); }); } + function selectCurrentMonth () { + var selectedPeriodId = vm.selectedPeriod.id; + + vm.selectedPeriod = _.find(vm.absencePeriods, function (period) { + return !!period.current; + }); + + (selectedPeriodId !== vm.selectedPeriod.id) && buildPeriodMonthsList(); + setCurrentMonth(); + setMonthPaginatorsAvailability(); + refresh('month'); + } + /** * Sends the "show" signal to the leave-calendar-month components * @@ -311,12 +358,44 @@ define([ /** * Sets the month that is to be selected by default */ - function setDefaultMonth () { + function setCurrentMonth () { vm.selectedMonthIndex = moment().year() + '-' + moment().month(); setSelectedMonth(); } + /** + * Sets the first month from the currently selected period as the selected month + */ + function setFirstPeriodMonth () { + vm.selectedMonthIndex = vm.months[0].index; + + setSelectedMonth(); + } + + /** + * Enables or disables the month paginator of a specified direction. + * It disables the paginator if there are no months to paginate to. + * + * @param {String} direction previous|next + */ + function setMonthPaginatorAvailability (direction) { + var edgeMonthSelector = direction === 'previous' ? 'first' : 'last'; + var edgeMonth = _[edgeMonthSelector](vm.months); + var edgeMonthMoment = moment().year(edgeMonth.year).month(edgeMonth.month); + + vm.monthPaginatorsAvailability[direction] = + !vm.selectedMonth.moment.isSame(edgeMonthMoment, 'month'); + } + + /** + * Enables or disables the month paginators + */ + function setMonthPaginatorsAvailability () { + setMonthPaginatorAvailability('previous'); + setMonthPaginatorAvailability('next'); + } + /** * Sets the month that is was selected */ diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index d349178ead5..ccc7efcd9e2 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -30,6 +30,8 @@ id: CRM.vars.leaveAndAbsences.contactId, role: 'staff' }; + var currentYear = 2016; + var currentMonth = 1; beforeEach(module('common.mocks', 'leave-absences.templates', 'leave-absences.mocks', 'my-leave', function (_$provide_, _$controllerProvider_) { $provide = _$provide_; @@ -95,7 +97,7 @@ // The mocked "work pattern calendar" and "leave request" data is made for // the month of February, so we pretend we are in February beforeAll(function () { - jasmine.clock().mockDate(new Date(2016, 1, 1)); + jasmine.clock().mockDate(new Date(currentYear, currentMonth, 1)); }); afterAll(function () { @@ -245,6 +247,45 @@ }); }); + describe('month paginators', function () { + describe('when current month is the first month of the current absence period', function () { + beforeEach(function () { + controller.selectedMonthIndex = _.first(controller.months).index; + + $rootScope.$digest(); + }); + + it('it does not allow to paginate to the previous month', function () { + expect(controller.monthPaginatorsAvailability.previous).toBe(false); + }); + }); + + describe('when current month is the last month of the current absence period', function () { + beforeEach(function () { + controller.selectedMonthIndex = _.last(controller.months).index; + + $rootScope.$digest(); + }); + + it('it does not allow to paginate to the previous month', function () { + expect(controller.monthPaginatorsAvailability.next).toBe(false); + }); + }); + + describe('when current month is neither the first nor the last month of the current absence period', function () { + beforeEach(function () { + controller.selectedMonthIndex = controller.months[1].index; + + $rootScope.$digest(); + }); + + it('it allows to paginate the month in both directions', function () { + expect(controller.monthPaginatorsAvailability.previous).toBe(true); + expect(controller.monthPaginatorsAvailability.next).toBe(true); + }); + }); + }); + describe('additional contacts filter', function () { describe('when the user is an admin', function () { beforeEach(function () { @@ -403,6 +444,20 @@ it('selects the current period', function () { expect(controller.selectedPeriod.current).toBe(true); }); + + describe('when absence period has been changed', function () { + beforeEach(function () { + controller.injectMonth = false; + controller.selectedPeriod = controller.absencePeriods[1]; + + controller.refresh('period'); + $rootScope.$digest(); + }); + + it('it sets the first month from the period as the selected month', function () { + expect(controller.selectedMonth).toEqual(controller.months[0]); + }); + }); }); describe('months', function () { @@ -417,6 +472,15 @@ expect(months[months.length - 1].year).toEqual(periodEndDate.year()); }); + it('sorts the list of the months', function () { + var months = controller.months; + var monthsSorted = _.sortBy(months, function (month) { + return new Date(month.moment); + }); + + expect(months).toEqual(monthsSorted); + }); + it('selects the current month', function () { expect(controller.selectedMonth).toEqual(_.find(controller.months, { index: moment().year() + '-' + moment().month() })); @@ -500,6 +564,70 @@ } }); + describe('selectCurrentMonth()', function () { + var currentAbsencePeriod; + + beforeEach(function () { + currentAbsencePeriod = _.find(controller.absencePeriods, + { current: true }); + controller.injectMonth = false; + controller.selectedPeriod = controller.absencePeriods[1]; + $rootScope.$digest(); + controller.selectedMonthIndex = currentYear + '-' + (currentMonth + 1); + $rootScope.$digest(); + controller.selectCurrentMonth(); + $rootScope.$digest(); + }); + + it('sets the selected month as the current month', function () { + expect(controller.selectedMonth.year).toBe(currentYear); + expect(controller.selectedMonth.month).toBe(currentMonth); + }); + + it('sets the current absence period', function () { + expect(controller.selectedPeriod).toEqual(currentAbsencePeriod); + }); + }); + + describe('paginateMonth()', function () { + var currentlySelectedMonth; + var tests = [ + { direction: 'previous', monthDifference: -1 }, + { direction: 'next', monthDifference: 1 } + ]; + + beforeEach(function () { + currentlySelectedMonth = controller.selectedMonth.month; + // This is needed to test the paginators availability + controller.months = _.slice(controller.months, 0, 3); + }); + + tests.forEach(function (test) { + describe('when user paginates to the ' + test.direction + ' month', function () { + beforeEach(function () { + controller.injectMonth = false; + controller.paginateMonth(test.direction); + $rootScope.$digest(); + simulateMonthWithSignal('injected', controller.months.length); + $rootScope.$digest(); + }); + + it('sets the selected month as a ' + test.direction + ' month', function () { + expect(controller.selectedMonth.moment + .diff(currentlySelectedMonth.moment, 'month')).toBe(test.monthDifference); + }); + + it('does not allow to paginate further because the are no more months in that direction', function () { + expect(controller.monthPaginatorsAvailability[test.direction]).toBe(false); + }); + + it('refreshes the month component without force data reload', function () { + expect($rootScope.$emit).toHaveBeenCalledWith('LeaveCalendar::showMonth', false); + }); + }); + }); + }); + describe('labelPeriod()', function () { var label, period; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index 63acfd2c308..ad0cc0302d1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -227,6 +227,21 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; } } +.chr_leave-calendar__month-header__go-to-current-month { + text-transform: uppercase; +} + +.chr_leave-calendar__month-header__go-to-current-month, +.chr_leave-calendar__month-header__month-paginator { + margin-right: 10px; +} + +.chr_leave-calendar__month-header__month-paginator { + color: $gray-darker; + padding-left: 0; + padding-right: 0; +} + .chr_leave-calendar__name { font-size: $font-size-small !important; line-height: 100%; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-month.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-month.html index 486540a1354..a9155d991f8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-month.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-month.html @@ -1,84 +1,78 @@ -
    -
    -

    {{month.month.name}} {{month.month.year}}

    -
    - -
    -
    -
    - There are no staff members matching selected filters -
    - -
    -
    - - - - - - - - - - - -
    -
    - -
    -
    - {{contact.display_name}} - {{contact.display_name}} -
    -
    -
    - - - - - - - - - - - -
    - {{day.name}} -
    {{day.index}}
    -
    - -
    -
    -
    - - - - + + + + + + + +
    -
    -
    -
    + {{contact.display_name}} + {{contact.display_name}} +
    +
    +
    + + + + + + + + + + + +
    + {{day.name}} +
    {{day.index}}
    +
    + +
    +
    + + + + + + +
    +
    +
    + +
    +
    +
    -
    - +
    + diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html index ad5a90cf935..a8df93b1025 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html @@ -77,7 +77,7 @@
    - {else}
    diff --git a/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl b/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl index 9e4465165da..f6458ca93af 100755 --- a/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl +++ b/hrjobcontract/templates/CRM/Hrjobcontract/Page/PayScale.tpl @@ -46,7 +46,7 @@ {foreach from=$rows item=row} - {$row.pay_scale} + {$row.pay_scale} {$row.currency} {$row.amount} {$row.pay_frequency} diff --git a/hrjobcontract/views/modalChangeReason.html b/hrjobcontract/views/modalChangeReason.html index f9d685d1991..60240ba989a 100644 --- a/hrjobcontract/views/modalChangeReason.html +++ b/hrjobcontract/views/modalChangeReason.html @@ -15,6 +15,11 @@
    +
    + + + +
    diff --git a/hrjobcontract/views/modalForm.html b/hrjobcontract/views/modalForm.html index 427740866da..e2438aa77a8 100755 --- a/hrjobcontract/views/modalForm.html +++ b/hrjobcontract/views/modalForm.html @@ -40,6 +40,11 @@

    General

    +
    + + + +
    @@ -53,6 +58,11 @@

    General

    +
    + + + +
    @@ -110,6 +120,11 @@

    General

    +
    + + + +
    @@ -237,6 +252,11 @@

    Hours

    +
    + + + +
    @@ -326,6 +346,11 @@

    Pay

    +
    + + + +
    @@ -405,7 +430,18 @@

    # - Benefit + +
    +
    + Benefit +
    +
    + + + +
    +
    + Type % Amount Absolute amount @@ -475,7 +511,18 @@

    # - Deduction + +
    +
    + Deduction +
    +
    + + + +
    +
    + Type % Amount Absolute amount @@ -664,6 +711,11 @@

    Health Insurance

    +
    + + + +
    @@ -737,6 +789,11 @@

    Life Insurance

    +
    + + + +
    From e2c368449162d1562f95cdd39f203848fdd2c555 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 25 May 2018 16:54:39 +0100 Subject: [PATCH 157/251] PCHR-3514: Add Hide label field to the DAO and sql install file. Add upgrader. --- .../HRLeaveAndAbsences/DAO/AbsenceType.php | 16 ++++++++++++- .../CRM/HRLeaveAndAbsences/Upgrader.php | 1 + .../HRLeaveAndAbsences/Upgrader/Step/1029.php | 24 +++++++++++++++++++ .../sql/auto_install.sql | 1 + .../CRM/HRLeaveAndAbsences/AbsenceType.xml | 6 +++++ 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php index 10d4a34375d..b3d365ac8ce 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/AbsenceType.php @@ -30,7 +30,7 @@ * * Generated from xml/schema/CRM/HRLeaveAndAbsences/AbsenceType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:894f42b522069204b99d7631796928f5) + * (GenCodeChecksum:1065880692bdb889904b901117a7eb96) */ require_once 'CRM/Core/DAO.php'; require_once 'CRM/Utils/Type.php'; @@ -186,6 +186,11 @@ class CRM_HRLeaveAndAbsences_DAO_AbsenceType extends CRM_Core_DAO { * @var string */ public $calculation_unit; + /** + * + * @var boolean + */ + public $hide_label; /** * Class constructor. */ @@ -465,6 +470,15 @@ static function &fields() { 'optionEditPath' => 'civicrm/admin/options/hrleaveandabsences_absence_type_calculation_unit', ) ) , + 'hide_label' => array( + 'name' => 'hide_label', + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'title' => ts('This controls the visibility of the Leave Type label in the calendar and feeds.') , + 'table_name' => 'civicrm_hrleaveandabsences_absence_type', + 'entity' => 'AbsenceType', + 'bao' => 'CRM_HRLeaveAndAbsences_DAO_AbsenceType', + 'localizable' => 0, + ) , ); CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php index 6a123c158c9..d674f79e6f9 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader.php @@ -34,6 +34,7 @@ class CRM_HRLeaveAndAbsences_Upgrader extends CRM_HRLeaveAndAbsences_Upgrader_Ba use CRM_HRLeaveAndAbsences_Upgrader_Step_1026; use CRM_HRLeaveAndAbsences_Upgrader_Step_1027; use CRM_HRLeaveAndAbsences_Upgrader_Step_1028; + use CRM_HRLeaveAndAbsences_Upgrader_Step_1029; /** * A list of directories to be scanned for XML installation files diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php new file mode 100644 index 00000000000..e6db5418db3 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Upgrader/Step/1029.php @@ -0,0 +1,24 @@ +hrleaveandabsences_absence_type_calculation_unit + + hide_label + This controls the visibility of the Leave Type label in the calendar and feeds. + boolean + 0 + From 7c506ce7e5c7e011d81404b0bb30a5ecd268cab3 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 25 May 2018 16:56:27 +0100 Subject: [PATCH 158/251] PCHR-3514: Add Hide label field to the Absence Type form. --- .../CRM/HRLeaveAndAbsences/Form/AbsenceType.php | 7 ++++++- .../templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php index 8ca89082d76..8f771128492 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/Form/AbsenceType.php @@ -76,7 +76,7 @@ public function postProcess() { //when a checkbox is not checked, it is not sent on the request //so we check if it wasn't sent and set the param value to 0 - $checkboxFields = ['is_default', 'is_active', 'allow_accruals_request', 'allow_carry_forward']; + $checkboxFields = ['is_default', 'is_active', 'allow_accruals_request', 'allow_carry_forward', 'hide_label']; foreach ($checkboxFields as $field) { if(!array_key_exists($field, $params)) { $params[$field] = 0; @@ -132,6 +132,11 @@ private function addBasicDetailsFields() { $this->getDAOFieldAttributes('color'), TRUE ); + $this->add( + 'checkbox', + 'hide_label', + ts('Hide leave type label on public calendars and feeds?') + ); $this->add( 'checkbox', 'is_default', diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl b/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl index d54e4e10f18..e101f499c0a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl @@ -19,6 +19,10 @@
    {$form.color.label}
    {$form.color.html}
    +
    +
    {$form.hide_label.label}
    +
    {$form.hide_label.html}
    +
    {$form.is_default.label}
    {$form.is_default.html}
    From 7a0676097da4cd3def9e890e8286cf6fcfe10b2a Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 25 May 2018 16:57:22 +0100 Subject: [PATCH 159/251] PCHR-3514: The LeaveBalanceChangeExpiryLog BAO checksum changes while running build dao. --- .../CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php index f3661b6a4b5..7bfdd701c7b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/DAO/LeaveBalanceChangeExpiryLog.php @@ -30,7 +30,7 @@ * * Generated from xml/schema/CRM/HRLeaveAndAbsences/LeaveBalanceChangeExpiryLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:00010b2fd39ed197ea73c2cbda8ad725) + * (GenCodeChecksum:01a66483965afa9ab1cd90195e081cc9) */ require_once 'CRM/Core/DAO.php'; require_once 'CRM/Utils/Type.php'; From e9aa8c808604ee0158ac54b87541d5ddc57cb853 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 25 May 2018 17:41:52 +0100 Subject: [PATCH 160/251] PCHR-3514: Change position of the hide_label field. --- .../templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl b/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl index e101f499c0a..426bdb5e1bb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/templates/CRM/HRLeaveAndAbsences/Form/AbsenceType.tpl @@ -19,10 +19,6 @@
    {$form.color.label}
    {$form.color.html}
    -
    -
    {$form.hide_label.label}
    -
    {$form.hide_label.html}
    -
    {$form.is_default.label}
    {$form.is_default.html}
    @@ -53,6 +49,10 @@
    {$form.is_active.label}
    {$form.is_active.html}
    +
    +
    {$form.hide_label.label}
    +
    {$form.hide_label.html}
    +
    From 15e59267d789928090d407fa935db5d5ecd01731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Sat, 26 May 2018 13:56:24 -0400 Subject: [PATCH 161/251] PCHR-3515: Implement leave calendar service --- .../src/leave-absences/absence-tab/app.js | 1 + .../src/leave-absences/admin-dashboard/app.js | 1 + .../src/leave-absences/manager-leave/app.js | 1 + .../src/leave-absences/my-leave/app.js | 1 + .../shared/services/leave-calendar.service.js | 120 ++++++++++ .../services/leave-calendar.service.spec.js | 219 ++++++++++++++++++ 6 files changed, 343 insertions(+) create mode 100644 uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js create mode 100644 uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js index 40ec97e1787..d1e659d8942 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/absence-tab/app.js @@ -41,6 +41,7 @@ define([ 'leave-absences/shared/models/absence-type.model', 'leave-absences/shared/models/entitlement.model', 'leave-absences/shared/modules/shared-settings', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/absence-tab/components/absence-tab-container.component', 'leave-absences/absence-tab/components/absence-tab-entitlements.component', diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js index e496863348b..9a12c3eeb69 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/admin-dashboard/app.js @@ -28,6 +28,7 @@ define([ 'leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller', 'leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller', 'leave-absences/shared/modules/shared-settings', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/admin-dashboard/modules/config', 'leave-absences/admin-dashboard/components/admin-dashboard-container' diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js index ac140d1f4cb..10842627286 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/manager-leave/app.js @@ -33,6 +33,7 @@ define([ 'leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller', 'leave-absences/shared/models/absence-period.model', 'leave-absences/shared/models/absence-type.model', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/manager-leave/components/manager-leave-container', 'leave-absences/manager-leave/modules/config' diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js index a5adeb64718..dedd083c9d7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/my-leave/app.js @@ -45,6 +45,7 @@ define([ 'leave-absences/shared/models/public-holiday.model', 'leave-absences/shared/modules/shared-settings', 'leave-absences/shared/modules/shared-settings', + 'leave-absences/shared/services/leave-calendar.service', 'leave-absences/shared/services/leave-popup.service', 'leave-absences/my-leave/components/my-leave-container.component', 'leave-absences/my-leave/modules/config' diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js new file mode 100644 index 00000000000..9857a856da9 --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js @@ -0,0 +1,120 @@ +/* eslint-env amd */ + +define([ + 'common/lodash', + 'common/moment', + 'leave-absences/shared/modules/services' +], function (_, moment, services) { + 'use strict'; + + services.factory('LeaveCalendarService', LeaveCalendarService); + + LeaveCalendarService.$inject = [ + '$log', '$q', 'Contact', 'Contract' + ]; + + function LeaveCalendarService ($log, $q, Contact, Contract) { + $log.debug('LeaveCalendarService'); + + /** + * Returns a list of common functions that are sahred between leave calendar + * sub controller. + * + * @param {Object} vm - the sub controller's view model. + * @return {Object} a collection of functions. + */ + function init (vm) { + var contracts; + + /** + * Returns a promise of all the contacts that can be used for look up + * against the ids to reduce by. + * + * @return {Promise} + */ + function loadAllLookUpContacts () { + return Contact.all().then(function (contacts) { + return contacts.list; + }); + } + + /** + * Returns a promise of a list of contact ids for contacts with contracts + * that are valid for the selected period's start and end dates. + * + * @return {Promise} + */ + function loadContactIdsToReduceTo () { + return loadContracts() + .then(function (contracts) { + var contractsInAbsencePeriod = contracts.filter(function (contract) { + var details = contract.info.details; + + return ( + moment(details.period_start_date).isSameOrBefore(vm.selectedPeriod.end_date) && + (moment(details.period_end_date).isSameOrAfter(vm.selectedPeriod.start_date) || + !details.period_end_date) + ); + }); + + return _.uniq(contractsInAbsencePeriod.map(function (contract) { + return contract.contact_id; + })); + }); + } + + /** + * Returns a list of contacts reduced by the leave calendar filters and + * sorts them by the contact's display name. + * + * @return {Promise} + */ + function loadFilteredContacts () { + return Contact.all(prepareContactFilters(), null, 'display_name') + .then(function (contacts) { + return contacts.list; + }); + } + + /** + * Returns a list of all contracts. The result is cached locally. + * + * @return {Promise} + */ + function loadContracts () { + return contracts ? $q.resolve(contracts) : Contract.all(); + } + + /** + * Returns a map of filters to pass to the Contact API. + * + * @return {Object} + */ + function prepareContactFilters () { + return { + department: _.get(vm, 'filters.userSettings.department.value', null), + level_type: _.get(vm, 'filters.userSettings.level_type.value', null), + location: _.get(vm, 'filters.userSettings.location.value', null), + region: _.get(vm, 'filters.userSettings.region.value', null), + id: { + 'IN': vm.filters.userSettings.contact + ? [vm.filters.userSettings.contact.id] + : vm.lookupContacts.map(function (contact) { + return contact.id; + }) + } + }; + } + + return { + loadAllLookUpContacts: loadAllLookUpContacts, + loadContactIdsToReduceTo: loadContactIdsToReduceTo, + loadFilteredContacts: loadFilteredContacts + }; + } + + return { + init: init + }; + } +}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js new file mode 100644 index 00000000000..e9813090c6c --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js @@ -0,0 +1,219 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/lodash', + 'common/mocks/data/contact.data', + 'common/mocks/data/contract.data', + 'common/models/contact', + 'common/models/contract', + 'common/services/hr-settings', + 'leave-absences/shared/services/leave-calendar.service' +], function (_, contactsMockData, contractsMockData) { + 'use strict'; + + describe('LeaveCalendarService', function () { + var $rootScope, Contact, contractApi, customContractValues, leaveCalendar, mockedContracts, vm; + + beforeEach(module('common.mocks', 'common.models', 'common.services', + 'leave-absences.services', function ($provide) { + contractApi = { + all: jasmine.createSpy('all') + }; + customContractValues = [ + { contact_id: _.uniqueId(), period_start_date: '2000-01-01', period_end_date: '2000-01-31' }, + { contact_id: _.uniqueId(), period_start_date: '2000-02-01', period_end_date: '2000-02-29' }, + { contact_id: _.uniqueId(), period_start_date: '2000-03-01', period_end_date: '2000-03-31' } + ]; + mockedContracts = getMockedContracts(customContractValues); + + $provide.value('api.contract', contractApi); + }) + ); + + beforeEach(inject(function ($q, _$rootScope_, _Contact_, LeaveCalendarService) { + $rootScope = _$rootScope_; + vm = {}; + Contact = _Contact_; + leaveCalendar = LeaveCalendarService.init(vm); + + spyOn(Contact, 'all').and.returnValue($q.resolve({ list: contactsMockData.all.values })); + contractApi.all.and.returnValue($q.resolve(mockedContracts)); + })); + + it('defines a leave calendar service', function () { + expect(leaveCalendar).toBeDefined(); + }); + + describe('loadAllLookUpContacts()', function () { + var allLookUpContacts; + + beforeEach(function (done) { + leaveCalendar.loadAllLookUpContacts() + .then(function (_allLookupContacts_) { + allLookUpContacts = _allLookupContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('requests all contacts', function () { + expect(Contact.all).toHaveBeenCalledWith(); + }); + + it('returns a list of look up contacts', function () { + expect(allLookUpContacts).toEqual(contactsMockData.all.values); + }); + }); + + describe('loadContactIdsToReduceTo()', function () { + var contactIdsToReduceTo, expectedContactIdsToReduceTo; + + describe('when all the contracts are covered by the period filters', function () { + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id'); + vm.selectedPeriod = { + start_date: customContractValues[0].period_start_date, + end_date: customContractValues[2].period_end_date + }; + + loadContactIdsToReduceTo(done); + }); + + it('returns all the contact ids with contracts within the selected period', function () { + expect(contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + }); + + describe('when only some of the contracts are covered by the period filters', function () { + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id').slice(1, 3); + vm.selectedPeriod = { + start_date: customContractValues[1].period_start_date, + end_date: customContractValues[2].period_end_date + }; + + loadContactIdsToReduceTo(done); + }); + + it('returns all the contact ids with contracts within the selected period', function () { + expect(contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + }); + + /** + * Executes the load contact ids to reduce to function and stores the result. + * + * @param {Function} done the jasmine done function to execute once the contact + * ids have been loaded. + */ + function loadContactIdsToReduceTo (done) { + leaveCalendar.loadContactIdsToReduceTo() + .then(function (_contactIdsToReduceTo_) { + contactIdsToReduceTo = _contactIdsToReduceTo_; + }) + .finally(done); + $rootScope.$digest(); + } + }); + + describe('loadFilteredContacts()', function () { + var expectedFilters; + + beforeEach(function () { + vm.lookupContacts = []; + vm.filters = { + userSettings: { + department: { value: _.uniqueId() }, + level_type: { value: _.uniqueId() }, + location: { value: _.uniqueId() }, + region: { value: _.uniqueId() } + } + }; + expectedFilters = { + department: vm.filters.userSettings.department.value, + level_type: vm.filters.userSettings.level_type.value, + location: vm.filters.userSettings.location.value, + region: vm.filters.userSettings.region.value + }; + }); + + describe('general case', function () { + var filteredContacts; + + beforeEach(function (done) { + leaveCalendar.loadFilteredContacts() + .then(function (_filteredContacts_) { + filteredContacts = _filteredContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('requests a list of contacts using the selected filters and sorted by display name', function () { + expect(Contact.all).toHaveBeenCalledWith( + jasmine.objectContaining(expectedFilters), null, 'display_name'); + }); + + it('returns a list of filtered contacts', function () { + expect(filteredContacts).toEqual(contactsMockData.all.values); + }); + }); + + describe('when the contact filter is selected', function () { + beforeEach(function () { + vm.filters.userSettings.contact = { id: _.uniqueId() }; + expectedFilters.id = { IN: [vm.filters.userSettings.contact.id] }; + + leaveCalendar.loadFilteredContacts(); + }); + + it('only returns the selected contact from the filter', function () { + expect(Contact.all).toHaveBeenCalledWith(expectedFilters, null, 'display_name'); + }); + }); + + describe('when there is a list of look up contacts', function () { + var expectedContactIds; + + beforeEach(function () { + vm.lookupContacts = _.shuffle(contactsMockData.all.values).slice(0, 2); + expectedContactIds = _.pluck(vm.lookupContacts, 'id'); + expectedFilters.id = { IN: expectedContactIds }; + + leaveCalendar.loadFilteredContacts(); + }); + + it('only returns the contacts from the look up list', function () { + expect(Contact.all).toHaveBeenCalledWith(expectedFilters, null, 'display_name'); + }); + }); + }); + + /** + * Returns a list of mocked contracts with overriden values as provided by + * the custom contract values parameter. + * + * @param {Array} customContractValues a list of values to override for each contract. + * @return {Array} the list of overriden contracts. + */ + function getMockedContracts (customContractValues) { + var mockedContracts = _.cloneDeep(contractsMockData.all); + + mockedContracts.values = customContractValues.map(function (customContractValue, i) { + var contractData = mockedContracts.values[i] || {}; + + return _.extend(contractData, { + contact_id: customContractValue.contact_id, + 'info': { + details: { + period_start_date: customContractValue.period_start_date, + period_end_date: customContractValue.period_end_date + } + } + }); + }); + + return mockedContracts.values; + } + }); +}); From b065db222f138138ee5c21071150df048268971d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Sun, 27 May 2018 13:20:17 -0400 Subject: [PATCH 162/251] PCHR-3515: Implement leave calendar service on leave calendar manager controller --- .../leave-calendar-manager.controller.js | 46 +++---------------- .../leave-calendar-manager.controller.spec.js | 41 +++++++++++------ 2 files changed, 35 insertions(+), 52 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js index 279c60aef90..2bb29da7158 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller.js @@ -6,12 +6,12 @@ define([ 'leave-absences/shared/modules/controllers' ], function (_, moment, controllers) { controllers.controller('LeaveCalendarManagerController', ['$log', 'Contact', - 'ContactInstance', controller]); + 'ContactInstance', 'LeaveCalendarService', controller]); - function controller ($log, Contact, ContactInstance) { + function controller ($log, Contact, ContactInstance, LeaveCalendarService) { $log.debug('LeaveCalendarManagerController'); - var vm; + var leaveCalendar, vm; return { /** @@ -20,6 +20,7 @@ define([ */ init: function (_vm_) { vm = _vm_; + leaveCalendar = LeaveCalendarService.init(vm); vm.showContactName = true; vm.showFilters = true; @@ -45,42 +46,9 @@ define([ .then(function (contacts) { vm.lookupContacts = contacts; }) - .then(loadContacts); - } - }; - } - - /** - * Load all contacts with respect to filters - * - * @return {Promise} - */ - function loadContacts () { - return Contact.all(prepareContactFilters(), null, 'display_name') - .then(function (contacts) { - return contacts.list; - }); - } - - /** - * Returns the filter object for contacts api - * - * @TODO This function should be a part of a Filter component, which is planned for future - * - * @return {Object} - */ - function prepareContactFilters () { - return { - department: vm.filters.userSettings.department ? vm.filters.userSettings.department.value : null, - level_type: vm.filters.userSettings.level_type ? vm.filters.userSettings.level_type.value : null, - location: vm.filters.userSettings.location ? vm.filters.userSettings.location.value : null, - region: vm.filters.userSettings.region ? vm.filters.userSettings.region.value : null, - id: { - 'IN': vm.filters.userSettings.contact - ? [vm.filters.userSettings.contact.id] - : vm.lookupContacts.map(function (contact) { - return contact.id; - }) + .then(function () { + return leaveCalendar.loadFilteredContacts(); + }); } }; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js index 1a1ac13d1b2..a5e163ff0b3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-manager.controller.spec.js @@ -2,12 +2,14 @@ (function (CRM) { define([ + 'leave-absences/mocks/services/leave-calendar.service.mock', 'leave-absences/my-leave/app' - ], function () { + ], function (leaveCalendarServiceMock) { 'use strict'; describe('LeaveCalendarManagerController', function () { - var $controller, $log, $provide, $rootScope, Contact, ContactInstance, controller, realContactInstance; + var $controller, $log, $provide, $rootScope, Contact, ContactInstance, controller, + realContactInstance, vm; var contactId = CRM.vars.leaveAndAbsences.contactId; beforeEach(module('my-leave', function (_$provide_) { @@ -16,15 +18,17 @@ beforeEach(inject(['api.contact.mock', function (ContactAPIMock) { $provide.value('api.contact', ContactAPIMock); + $provide.value('LeaveCalendarService', leaveCalendarServiceMock.service); }])); - beforeEach(inject(function (_$controller_, _$log_, _$rootScope_, _Contact_, _ContactInstance_) { + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_, _Contact_, _ContactInstance_) { $controller = _$controller_; $log = _$log_; $rootScope = _$rootScope_; Contact = _Contact_; ContactInstance = _ContactInstance_; + leaveCalendarServiceMock.setup($q); spyOn($log, 'debug'); spyOn(Contact, 'all').and.callThrough(); spyOnContactInstance(); @@ -36,9 +40,19 @@ expect($log.debug).toHaveBeenCalled(); }); + it('initializes the leave calendar service', function () { + expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); + }); + describe('loadContacts()', function () { - beforeEach(function () { - controller.loadContacts(); + var contacts; + + beforeEach(function (done) { + controller.loadContacts() + .then(function (_contacts_) { + contacts = _contacts_; + }) + .finally(done); $rootScope.$digest(); }); @@ -46,12 +60,12 @@ expect(realContactInstance.leaveManagees).toHaveBeenCalled(); }); - it('filters the contact using the filters selected by the user', function () { - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('department'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('level_type'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('location'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('region'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('id'); + it('requests the filtered contacts', function () { + expect(leaveCalendarServiceMock.instance.loadFilteredContacts).toHaveBeenCalledWith(); + }); + + it('returns the filtered contacts', function () { + expect(contacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); }); }); @@ -72,10 +86,11 @@ } function initController () { - controller = $controller('LeaveCalendarManagerController').init({ + vm = { contactId: contactId, filters: { userSettings: {} } - }); + }; + controller = $controller('LeaveCalendarManagerController').init(vm); } }); }); From 9f8527ea42ebed1ad413cbd946bb4c7658d8376f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Sun, 27 May 2018 22:48:58 -0400 Subject: [PATCH 163/251] PCHR-3515: Implement the Leave Calendar Service on the Leave Calendar Admin Controller --- .../leave-calendar-admin.controller.js | 87 +++---------------- .../leave-calendar-admin.controller.spec.js | 56 ++++++++---- 2 files changed, 51 insertions(+), 92 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js index 3d90ccc1629..a577301a5fc 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js @@ -8,12 +8,14 @@ define([ 'common/services/notification.service' ], function (_, moment, controllers) { controllers.controller('LeaveCalendarAdminController', ['$log', '$q', - 'Contact', 'ContactInstance', 'Contract', 'notificationService', controller]); + 'Contact', 'ContactInstance', 'Contract', 'notificationService', + 'LeaveCalendarService', controller]); - function controller ($log, $q, Contact, ContactInstance, Contract, notification) { + function controller ($log, $q, Contact, ContactInstance, Contract, notification, + LeaveCalendarService) { $log.debug('LeaveCalendarAdminController'); - var contracts, vm; + var leaveCalendar, vm; return { /** @@ -22,6 +24,7 @@ define([ */ init: function (_vm_) { vm = _vm_; + leaveCalendar = LeaveCalendarService.init(vm); vm.showContactDetailsLink = true; vm.showContactName = true; vm.showFilters = true; @@ -38,31 +41,6 @@ define([ } }; - /** - * Get contact IDs filtered according to contracts that belong - * to the currently selected absence period - * - * @return {Promise} resolved to contacts list - */ - function loadContactIdsToReduceTo () { - return loadContracts() - .then(function (contracts) { - var contractsInAbsencePeriod = contracts.filter(function (contract) { - var details = contract.info.details; - - return ( - moment(details.period_start_date).isSameOrBefore(vm.selectedPeriod.end_date) && - (moment(details.period_end_date).isSameOrAfter(vm.selectedPeriod.start_date) || - !details.period_end_date) - ); - }); - - return _.uniq(contractsInAbsencePeriod.map(function (contract) { - return contract.contact_id; - })); - }); - } - /** * Returns the api of the sub-controller * @@ -83,9 +61,10 @@ define([ vm.lookupContacts = contacts; return $q.all([ - loadContacts(), + leaveCalendar.loadFilteredContacts(), filterByAssignee !== 'me' - ? loadContactIdsToReduceTo() : $q.resolve(null) + ? leaveCalendar.loadContactIdsToReduceTo() + : $q.resolve(null) ]); }) .then(function (results) { @@ -99,27 +78,6 @@ define([ }; } - /** - * Load all contacts with respect to filters - * - * @return {Promise} - */ - function loadContacts () { - return Contact.all(prepareContactFilters(), null, 'display_name') - .then(function (contacts) { - return contacts.list; - }); - } - - /** - * Load all contracts or retrieve them from cache - * - * @return {Promise} - */ - function loadContracts () { - return contracts ? $q.resolve(contracts) : Contract.all(); - } - /** * Returns the loading contacts promise depending on the * filter by assignee chosen @@ -135,35 +93,10 @@ define([ unassigned: true }); } else { - return Contact.all().then(function (contacts) { - return contacts.list; - }); + return leaveCalendar.loadAllLookUpContacts(); } } - /** - * Returns the filter object for contacts api - * - * @TODO This function should be a part of a Filter component, which is planned for future - * - * @return {Object} - */ - function prepareContactFilters () { - return { - department: vm.filters.userSettings.department ? vm.filters.userSettings.department.value : null, - level_type: vm.filters.userSettings.level_type ? vm.filters.userSettings.level_type.value : null, - location: vm.filters.userSettings.location ? vm.filters.userSettings.location.value : null, - region: vm.filters.userSettings.region ? vm.filters.userSettings.region.value : null, - id: { - 'IN': vm.filters.userSettings.contact - ? [vm.filters.userSettings.contact.id] - : vm.lookupContacts.map(function (contact) { - return contact.id; - }) - } - }; - } - /** * Shows a hint to the filtering logic */ diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js index 5488d3ca8f3..0cd68e10eb6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js @@ -2,12 +2,13 @@ (function (CRM) { define([ + 'leave-absences/mocks/services/leave-calendar.service.mock', 'leave-absences/my-leave/app' - ], function () { + ], function (leaveCalendarServiceMock) { 'use strict'; describe('LeaveCalendarAdminController', function () { - var $controller, $log, $provide, $rootScope, Contact, controller; + var $controller, $log, $provide, $rootScope, Contact, controller, vm; var contactId = CRM.vars.leaveAndAbsences.contactId; beforeEach(module('my-leave', function (_$provide_) { @@ -16,9 +17,10 @@ beforeEach(inject(['api.contact.mock', function (ContactAPIMock) { $provide.value('api.contact', ContactAPIMock); + $provide.value('LeaveCalendarService', leaveCalendarServiceMock.service); }])); - beforeEach(inject(function (_$controller_, _$log_, _$rootScope_, _Contact_) { + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_, _Contact_) { $controller = _$controller_; $log = _$log_; $rootScope = _$rootScope_; @@ -26,6 +28,7 @@ spyOn($log, 'debug'); spyOn(Contact, 'all').and.callThrough(); + leaveCalendarServiceMock.setup($q); initController(); })); @@ -34,27 +37,50 @@ expect($log.debug).toHaveBeenCalled(); }); + it('initializes the leave calendar service', function () { + expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); + }); + describe('loadContacts()', function () { - beforeEach(function () { - controller.loadContacts(); - $rootScope.$digest(); - }); + var contacts; + + describe('when loading all of the contacts', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'all'; + + controller.loadContacts() + .then(function (_contacts_) { + contacts = _contacts_; + }) + .finally(done); + $rootScope.$digest(); + }); - it('filters the contact using the filters selected by the user', function () { - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('department'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('level_type'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('location'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('region'); - expect(Object.keys(Contact.all.calls.mostRecent().args[0])).toContain('id'); + it('requests the contact ids for contacts with valid contracts within the selected period', function () { + expect(leaveCalendarServiceMock.instance.loadContactIdsToReduceTo).toHaveBeenCalledWith(); + }); + + it('stores the contact ids to reduce to', function () { + expect(vm.contactIdsToReduceTo).toEqual(leaveCalendarServiceMock.data.contactIdsToReduceTo); + }); + + it('requests contacts based on the selected indexes', function () { + expect(leaveCalendarServiceMock.instance.loadFilteredContacts).toHaveBeenCalledWith(); + }); + + it('returns the list of filtered contacts', function () { + expect(contacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); + }); }); }); function initController () { - controller = $controller('LeaveCalendarAdminController').init({ + vm = { contactId: contactId, filters: { userSettings: {} }, selectedPeriod: { start_date: '2016-01-01', end_date: '2016-12-31' } - }); + }; + controller = $controller('LeaveCalendarAdminController').init(vm); } }); }); From 767e06154c95583d1ef4177c875bef8ea5eaea95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Sun, 27 May 2018 23:22:31 -0400 Subject: [PATCH 164/251] PCHR-3515: Display all staffs on My Leave --- .../leave-calendar-staff.controller.js | 26 ++++-- .../services/leave-calendar.service.mock.js | 33 ++++++++ .../leave-calendar-staff.controller.spec.js | 83 ++++++++++++++++--- 3 files changed, 122 insertions(+), 20 deletions(-) create mode 100644 uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js index 4e364514ae5..edd288c58c8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js @@ -5,12 +5,13 @@ define([ 'common/moment', 'leave-absences/shared/modules/controllers' ], function (_, moment, controllers) { - controllers.controller('LeaveCalendarStaffController', ['$log', 'Contact', controller]); + controllers.controller('LeaveCalendarStaffController', ['$log', 'Contact', + 'LeaveCalendarService', controller]); - function controller ($log, Contact) { + function controller ($log, Contact, LeaveCalendarService) { $log.debug('LeaveCalendarStaffController'); - var vm; + var leaveCalendar, vm; return { /** @@ -19,7 +20,10 @@ define([ */ init: function (_vm_) { vm = _vm_; + leaveCalendar = LeaveCalendarService.init(vm); vm.filters.userSettings.contacts_with_leaves = false; + vm.showContactName = true; + vm.showFilters = true; return api(); } @@ -41,12 +45,16 @@ define([ * @return {Promise} resolves as an {Array} */ loadContacts: function () { - return Contact.all({ - id: { in: [vm.contactId] } - }) - .then(function (contacts) { - return contacts.list; - }); + return leaveCalendar.loadAllLookUpContacts() + .then(function (lookupContacts) { + vm.lookupContacts = lookupContacts; + }) + .then(leaveCalendar.loadContactIdsToReduceTo) + .then(function (contactIdsToReduceTo) { + vm.contactIdsToReduceTo = contactIdsToReduceTo; + vm.contactIdsToReduceTo.push(vm.contactId); + }) + .then(leaveCalendar.loadFilteredContacts); } }; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js new file mode 100644 index 00000000000..c256b6e75fa --- /dev/null +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js @@ -0,0 +1,33 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/lodash', + 'common/mocks/data/contact.data' +], function (_, contactsMockData) { + var LeaveCalendarService = jasmine.createSpyObj('LeaveCalendarService', ['init']); + var leaveCalendarInstance = jasmine.createSpyObj('leaveCalendarInstance', [ + 'loadAllLookUpContacts', 'loadContactIdsToReduceTo', + 'loadFilteredContacts']); + var data = { + contactIdsToReduceTo: [_.uniqueId(), _.uniqueId(), _.uniqueId()], + filteredContacts: _.clone(contactsMockData.all.values.slice(0, 2)), + lookedUpContacts: _.clone(contactsMockData.all.values) + }; + + function setup ($q) { + LeaveCalendarService.init.and.returnValue(leaveCalendarInstance); + leaveCalendarInstance.loadAllLookUpContacts.and.returnValue($q.resolve( + data.lookedUpContacts)); + leaveCalendarInstance.loadContactIdsToReduceTo.and.returnValue($q.resolve( + data.contactIdsToReduceTo)); + leaveCalendarInstance.loadFilteredContacts.and.returnValue($q.resolve( + data.filteredContacts)); + } + + return { + data: data, + instance: leaveCalendarInstance, + service: LeaveCalendarService, + setup: setup + }; +}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js index ab62da48daf..ce508948b5d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js @@ -2,22 +2,42 @@ (function (CRM) { define([ + 'common/lodash', + 'common/mocks/data/contact.data', 'leave-absences/my-leave/app' - ], function () { + ], function (_, contactsMock) { 'use strict'; describe('LeaveCalendarStaffController', function () { - var $controller, $log, Contact, controller; + var $controller, $log, $rootScope, Contact, contactIdsToReduceTo, controller, + filteredContacts, leaveCalendar, LeaveCalendarService, lookedUpContacts, + vm; var contactId = CRM.vars.leaveAndAbsences.contactId; beforeEach(module('my-leave')); - beforeEach(inject(function (_$controller_, _$log_, _Contact_) { + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_, _Contact_, + _LeaveCalendarService_) { $controller = _$controller_; $log = _$log_; + $rootScope = _$rootScope_; Contact = _Contact_; + contactIdsToReduceTo = [_.uniqueId(), _.uniqueId(), _.uniqueId()]; + filteredContacts = _.clone(contactsMock.all.values.slice(0, 2)); + LeaveCalendarService = _LeaveCalendarService_; + leaveCalendar = jasmine.createSpyObj('leaveCalendar', [ + 'loadAllLookUpContacts', 'loadContactIdsToReduceTo', + 'loadFilteredContacts']); + lookedUpContacts = _.clone(contactsMock.all.values); spyOn($log, 'debug'); spyOn(Contact, 'all').and.callThrough(); + spyOn(LeaveCalendarService, 'init').and.returnValue(leaveCalendar); + leaveCalendar.loadAllLookUpContacts.and.returnValue($q.resolve( + lookedUpContacts)); + leaveCalendar.loadContactIdsToReduceTo.and.returnValue($q.resolve( + contactIdsToReduceTo)); + leaveCalendar.loadFilteredContacts.and.returnValue($q.resolve( + filteredContacts)); initController(); })); @@ -26,23 +46,64 @@ expect($log.debug).toHaveBeenCalled(); }); + it('initializes the leave calendar service', function () { + expect(LeaveCalendarService.init).toHaveBeenCalledWith(vm); + }); + + it('displays the contact names', function () { + expect(vm.showContactName).toBe(true); + }); + + it('displays the contact filters', function () { + expect(vm.showFilters).toBe(true); + }); + describe('loadContacts()', function () { - beforeEach(function () { - controller.loadContacts(); + var result, expectedContactIdsToReduceTo; + + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.clone(contactIdsToReduceTo); + + expectedContactIdsToReduceTo.push(vm.contactId); + controller.loadContacts() + .then(function (_result_) { + result = _result_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('loads all the look up contacts', function () { + expect(leaveCalendar.loadAllLookUpContacts).toHaveBeenCalled(); }); - it('simply fetches the data of the current contact', function () { - expect(Contact.all).toHaveBeenCalledWith({ - id: { in: [contactId] } - }); + it('loads the contact ids to reduce to', function () { + expect(leaveCalendar.loadContactIdsToReduceTo).toHaveBeenCalled(); + }); + + it('loads the filtered contacts', function () { + expect(leaveCalendar.loadFilteredContacts).toHaveBeenCalled(); + }); + + it('stores the looked up contacts', function () { + expect(vm.lookupContacts).toEqual(lookedUpContacts); + }); + + it('stores the contact ids to reduce to by contract plus the logged in contact id', function () { + expect(vm.contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + + it('returns the filtered contacts', function () { + expect(result).toEqual(filteredContacts); }); }); function initController () { - controller = $controller('LeaveCalendarStaffController').init({ + vm = { contactId: contactId, filters: { userSettings: {} } - }); + }; + controller = $controller('LeaveCalendarStaffController').init(vm); } }); }); From 0c155c9a5009a86bc51e14b52dbbcc725ff3e64c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Mon, 28 May 2018 18:47:30 -0400 Subject: [PATCH 165/251] PCHR-3515: Always display the logged in contact on My Leave even if they do not have leave requests for the selected period --- .../components/leave-calendar-month.component.js | 6 +++++- .../leave-calendar-staff.controller.js | 3 ++- .../leave-calendar-month.component.spec.js | 16 ++++++++++++++++ .../leave-calendar-staff.controller.spec.js | 4 ++++ .../views/shared/components/leave-calendar.html | 1 + 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index d43942bb376..422563e028b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -8,6 +8,7 @@ define([ ], function (_, moment, components) { components.component('leaveCalendarMonth', { bindings: { + showTheseContacts: '<', contacts: '<', contactIdsToReduceTo: '<', month: '<', @@ -127,7 +128,10 @@ define([ */ function contactsList () { return !vm.showOnlyWithLeaveRequests ? vm.contacts : vm.contacts.filter(function (contact) { - return Object.keys(leaveRequests[contact.id] || {}).length; + var hasLeaveRequests = Object.keys(leaveRequests[contact.id] || {}).length; + var isAlwaysShown = _.includes(vm.showTheseContacts, contact.id); + + return hasLeaveRequests || isAlwaysShown; }); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js index edd288c58c8..3fd947ac340 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js @@ -21,7 +21,8 @@ define([ init: function (_vm_) { vm = _vm_; leaveCalendar = LeaveCalendarService.init(vm); - vm.filters.userSettings.contacts_with_leaves = false; + vm.filters.userSettings.contacts_with_leaves = true; + vm.showTheseContacts = [vm.contactId]; vm.showContactName = true; vm.showFilters = true; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index 808bb558a35..6ea7b035c4f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -845,6 +845,22 @@ }); }); + describe('when show-only-with-leave-requests is set to true, but specific contacts must be shown even if they have no leave requests', function () { + var expectedContact; + + beforeEach(function () { + expectedContact = { id: _.uniqueId() }; + controller.showOnlyWithLeaveRequests = true; + controller.showTheseContacts = [expectedContact.id]; + + controller.contacts.push(expectedContact); + }); + + it('returns a list including the contacts that have no leave requests', function () { + expect(controller.contactsList()).toContain(expectedContact); + }); + }); + describe('when show-only-with-leave-requests is set to true and there is no leave request for contacts', function () { beforeEach(function () { LeaveRequest.all.and.callFake(function () { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js index ce508948b5d..43fc14cc3d2 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js @@ -58,6 +58,10 @@ expect(vm.showFilters).toBe(true); }); + it('always displays the logged in contact even if they do not have requests for the selected period', function () { + expect(vm.showTheseContacts).toEqual([vm.contactId]); + }); + describe('loadContacts()', function () { var result, expectedContactIdsToReduceTo; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html index fcc8365bfdb..0bc1bf2ffed 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html @@ -142,6 +142,7 @@

    show-contact-name="calendar.showContactName" show-contact-details-link="calendar.showContactDetailsLink" show-only-with-leave-requests="calendar.filters.userSettings.contacts_with_leaves" + show-these-contacts="calendar.showTheseContacts" support-data="calendar.supportData"> From d5808acbe6a04c89afa253aecffc955869f63d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Mon, 28 May 2018 18:50:38 -0400 Subject: [PATCH 166/251] PCHR-3515: Add dist files --- .../js/angular/dist/absence-tab.min.js | 8 ++++---- .../js/angular/dist/admin-dashboard.min.js | 10 +++++----- .../js/angular/dist/manager-leave.min.js | 10 +++++----- .../js/angular/dist/my-leave.min.js | 10 +++++----- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 6b3125f7bd7..1eeed58c61c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(t,a,o,s,i,r){function c(){return d().then(function(t){var a=t.filter(function(e){var t=e.info.details;return n(t.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(n(t.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!t.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function u(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(n){return v.lookupContacts=n,a.all([l(),"me"!==e?c():a.resolve(null)])}).then(function(e){var n=e[0];return v.contactIdsToReduceTo=e[1],n})}}}function l(){return o.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):i.all()}function m(e){return"me"===e?o.leaveManagees(v.contactId):"unassigned"===e?o.leaveManagees(void 0,{unassigned:!0}):o.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){r.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}t.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,u()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(o)}}}function o(){return n.all(s(),null,"display_name").then(function(e){return e.list})}function s(){return{department:i.filters.userSettings.department?i.filters.userSettings.department.value:null,level_type:i.filters.userSettings.level_type?i.filters.userSettings.level_type.value:null,location:i.filters.userSettings.location?i.filters.userSettings.location.value:null,region:i.filters.userSettings.region?i.filters.userSettings.region.value:null,id:{IN:i.filters.userSettings.contact?[i.filters.userSettings.contact.id]:i.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var i;return{init:function(e){return i=e,i.showContactName=!0,i.showFilters=!0,a()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n){function t(){return{loadContacts:function(){return n.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,t()}}}t.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),S())})}function h(e){U.injectMonth=!0,E("injected").then(function(){S(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function P(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(A).then("period"===n&&m).then("period"===n&&k).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function S(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function k(){x(U.months[0].moment)}function L(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){L("previous"),L("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(A).then(function(){return a.all([g(),q(),P(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){ -b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],t.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return Y[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(e){return Object.keys(G[e.id]||{}).length}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(G[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:P(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);G[e.contact_id]=G[e.contact_id]||{},n.forEach(function(n){G[e.contact_id][n.date]||(G[e.contact_id][n.date]=[]),G[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonth",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function P(e,n){return e.request_type===n}function A(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.month&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function S(){return V.month.loading=!0,a.all([k(),O()]).then(L).then(E).then(function(){W=!0,V.month.loading=!1})}function O(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function k(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){Y=e.indexBy(n,"contact_id")})}function L(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(G,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);G[n.contact_id]=G[n.contact_id]||{},t.forEach(function(t){e.remove(G[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(n.date)})}),s.then(function(){return G[t]&&G[t][n.date]?G[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){V.currentPage=0,V.visible=!0,(n||!W)&&S()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],Y={},G={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.month).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function P(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(A)}function A(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():P()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function S(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function k(e){return ne.request.request_type===e}function L(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(A).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(k("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||k("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=A,ne.isCalculationUnit=O,ne.isLeaveType=k,ne.isNotWorkingDay=L,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(S).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(A).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function P(e){return!e.attachment_id||S.canManage}function A(){e.forEach(I,function(e){e()})}function D(e,n){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",S.userDateFormat=i.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=P,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",S),g(),a.all([T(),q()]).then(_).finally(function(){S.filesLoaded=!0})}(),S}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function P(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function A(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function S(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function k(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function L(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([A(),P()]).then($).then(function(){G.loading.content=!1}).then(function(){ -return t.all([S(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:k},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([A(),P()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return P(i.uiOptions.fromDate,"from").then(function(){return P(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),S(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&S(e,!0))})}function P(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function A(e){return P(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){S(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){L[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return L[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){S("from",!0)})):o.resolve()}function S(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=L[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function k(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){S("from",!0)}):o.resolve()}var L={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=k,i.onDateChangeExtended=A,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function P(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&k(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function A(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),L())})})}function R(){c.isMode("view")||(T(),P(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),L(),F()}function S(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:L(),F()}function O(e){c.uiOptions.times[e].time=""}function k(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function L(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),L(),c.isCalculationUnit("hours")?k():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=A,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=S,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function P(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function A(){["from","to"].forEach(P)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function S(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function k(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function L(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==ke)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){Se.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Le="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Le="admin")}).then(function(){return"staff"===Le&&c(y.permissions.ssp.manage).then(function(e){e&&(Le="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Le===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(ke)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),A(),xe.request.isValid().then(ee()&&k).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Ae():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){Se.forEach(function(e){e()})}function Pe(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},Se=[],Oe="",ke="No entitlement",Le="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=S,xe.closeAlert=L,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Pe,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={ -workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday", +cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],t.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return Y[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(n){var t=Object.keys(G[n.id]||{}).length,a=e.includes(V.showTheseContacts,n.id);return t||a}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(G[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);G[e.contact_id]=G[e.contact_id]||{},n.forEach(function(n){G[e.contact_id][n.date]||(G[e.contact_id][n.date]=[]),G[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonth",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.month&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return V.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){W=!0,V.month.loading=!1})}function O(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function L(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){Y=e.indexBy(n,"contact_id")})}function S(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(G,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);G[n.contact_id]=G[n.contact_id]||{},t.forEach(function(t){e.remove(G[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return G[t]&&G[t][n.date]?G[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){V.currentPage=0,V.visible=!0,(n||!W)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],Y={},G={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.month).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){ +t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return u().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function u(){return d?a.resolve(d):s.all()}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:c}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){ +o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 9f9273a86f4..316e5fc24c5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in T)B(T[o])&&(t[o]=T[o](t,T.$delegates[o]));return P[n]=t,!t[S]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?T:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function S(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function T(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:T(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=S(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,T(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function k(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function L(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),R())})}function h(e){N.injectMonth=!0,L("injected").then(function(){R(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return N.injectMonth&&(e=L("destroyed"),N.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),E(),T("month")}function S(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),T("month")}function T(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(N.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(N.selectedMonthIndex=m(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function L(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=S,N.refresh=T,function(){k().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),N.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function S(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[S(u.statusNames.approved),S(u.statusNames.adminApproved),S(u.statusNames.awaitingApproval),S(u.statusNames.moreInformationRequired)]}function R(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(L).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:T()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function L(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return k(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&R()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==T().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval], -dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return L();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),L()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&L)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?L():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function S(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",L))}function T(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function k(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function L(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(L)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),L()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:k},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=L,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),S(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(T).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function f(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){T[e.label]=t})})).catch(function(){T=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(S,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],S=[],T={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,R.canSubmit=d,R.canUploadMore=f,R.formatDateTime=m,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(R(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function S(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function T(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function R(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:k(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function k(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function L(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=L,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),T(),S(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return S(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function S(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function T(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=T}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])} -return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(S)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function S(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function T(){return l(),x(),B()}function R(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function k(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function L(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){S(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=k,u.onDateChangeExtended=T,u.openToilInDaysAccrualOptionsEditor=L,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Te.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||S())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function k(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function L(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Te,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Se++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Te[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Te=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Se&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Se>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Se=0,Te={},Re=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=T,Me.canSubmit=R,Me.closeAlert=x,Me.deleteLeaveRequest=k,Me.dismissModal=L,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r), -r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}), +define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(), +u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return c().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function c(){return d?a.resolve(d):o.all()}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:u}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){ +if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index f6a9c174713..a34114e3bb6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in T)B(T[o])&&(t[o]=T[o](t,T.$delegates[o]));return P[n]=t,!t[S]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=M[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===D?T:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),T):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=D(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function S(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function T(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:T(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=S(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function M(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,T(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return f(e).then(function(t){return v.lookupContacts=t,a.all([l(),"me"!==e?u():a.resolve(null)])}).then(function(e){var t=e[0];return v.contactIdsToReduceTo=e[1],t})}}}function l(){return r.all(m(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function f(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function m(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),R())})}function h(e){N.injectMonth=!0,k("injected").then(function(){R(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),M(),T("month")}function S(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),T("month")}function T(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&M).then(function(){h("contacts"===t)})}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){E(t())}function I(){E(N.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){x("previous"),x("next")}function E(t){t&&(N.selectedMonthIndex=m(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function L(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=S,N.refresh=T,function(){L().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),N.showFilters?$():e.noop])}).then(function(){h(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(M(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function S(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function T(){return[S(u.statusNames.approved),S(u.statusNames.adminApproved),S(u.statusNames.awaitingApproval),S(u.statusNames.moreInformationRequired)]}function R(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:T()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&R()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==T().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=E,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"}, -templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function S(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function T(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),S(),te.initChildController().then(function(){return s.all([E(),M()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(T).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function f(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){T[e.label]=t})})).catch(function(){T=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function A(e){return!e.attachment_id||R.canManage}function w(){e.forEach(S,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],S=[],T={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=w,R.canRemoveAttachment=A,R.canSubmit=d,R.canUploadMore=f,R.formatDateTime=m,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?D(e):n.all([D("table"),D("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function D(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(R(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function S(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function T(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function R(t){var n=U.filters.leaveRequest;return{contact_id:M(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function M(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function E(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=E(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),T(),S(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return S(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function S(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function T(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"), -!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=T}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(S)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function D(){u.isMode("view")||(C(),A(),P())}function S(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function T(){return l(),x(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function M(){F=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){S(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=T,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){M(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Te.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||S())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function O(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function I(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==F())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Ee.errors=[]}function M(){return Ee.request.create().then($e).then(function(){me("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Ee.getStatusFromValue(Ee.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function F(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():N("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Te,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Ee.isMode("edit")?be:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?m.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Se++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=F(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=q.init(t):"toil"===e&&(Ee.request=$.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,g.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Ee.selectedContactId?m.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?m.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Te[e+"_date"]})}function he(e){if(Ee.absenceTypes=fe(Pe.types,e),!Ee.absenceTypes.length)return r.reject(Ie)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function ge(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function be(){Te=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,O(),w(),Ee.request.isValid().then(ee()&&I).then(E).then(!Ee.request.change_balance&&pe).then(qe).then(function(){return Ee.isMode("edit")?we():M()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function qe(){return r.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Se&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Se>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Ee.request.update().then($e).then(function(){Ee.isRole("manager")?me("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Se=0,Te={},Re=[],Oe="",Ie="No entitlement",xe="",Me=[],Ee=n.assign(this,f);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=T,Ee.canSubmit=R,Ee.closeAlert=x,Ee.deleteLeaveRequest=L,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=Ae,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r), -r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=M[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function M(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),S())})}function h(e){N.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),M(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&M).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){L(t())}function I(){L(N.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){x("previous"),x("next")}function L(t){t&&(N.selectedMonthIndex=m(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=T,N.paginateMonth=D,N.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),N.showFilters?$():e.noop])}).then(function(){h(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(M(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r +}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),M()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:M(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function M(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a), +a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function M(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){M(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return c().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function c(){return d?a.resolve(d):o.all()}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:u}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function M(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():M()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Me=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=x,Le.deleteLeaveRequest=E,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId), +Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 798cf9fbc94..686d54c51dc 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return P[n]=t,!t[T]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function T(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function x(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function O(e,t){return{relative:S(e)||t.$current,inherit:!0}}function I(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=T(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(O(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=x(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=x(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(n,a,r,o,s,i){function u(){return d().then(function(n){var a=n.filter(function(e){var n=e.info.details;return t(n.period_start_date).isSameOrBefore(v.selectedPeriod.end_date)&&(t(n.period_end_date).isSameOrAfter(v.selectedPeriod.start_date)||!n.period_end_date)});return e.uniq(a.map(function(e){return e.contact_id}))})}function c(){return{loadContacts:function(){var e=v.filters.userSettings.assignedTo.type;return m(e).then(function(t){return v.lookupContacts=t,a.all([l(),"me"!==e?u():a.resolve(null)])}).then(function(e){var t=e[0];return v.contactIdsToReduceTo=e[1],t})}}}function l(){return r.all(f(),null,"display_name").then(function(e){return e.list})}function d(){return h?a.resolve(h):s.all()}function m(e){return"me"===e?r.leaveManagees(v.contactId):"unassigned"===e?r.leaveManagees(void 0,{unassigned:!0}):r.all().then(function(e){return e.list})}function f(){return{department:v.filters.userSettings.department?v.filters.userSettings.department.value:null,level_type:v.filters.userSettings.level_type?v.filters.userSettings.level_type.value:null,location:v.filters.userSettings.location?v.filters.userSettings.location.value:null,region:v.filters.userSettings.region?v.filters.userSettings.region.value:null,id:{IN:v.filters.userSettings.contact?[v.filters.userSettings.contact.id]:v.lookupContacts.map(function(e){return e.id})}}}function p(e){i.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}n.debug("LeaveCalendarAdminController");var h,v;return{init:function(e){return v=e,v.showContactDetailsLink=!0,v.showContactName=!0,v.showFilters=!0,v.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],v.filters.userSettings.assignedTo=v.filtersByAssignee[0],v.showAdminFilteringHint=p,c()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(r)}}}function r(){return t.all(o(),null,"display_name").then(function(e){return e.list})}function o(){return{department:s.filters.userSettings.department?s.filters.userSettings.department.value:null,level_type:s.filters.userSettings.level_type?s.filters.userSettings.level_type.value:null,location:s.filters.userSettings.location?s.filters.userSettings.location.value:null,region:s.filters.userSettings.region?s.filters.userSettings.region.value:null,id:{IN:s.filters.userSettings.contact?[s.filters.userSettings.contact.id]:s.lookupContacts.map(function(e){return e.id})}}}e.debug("LeaveCalendarManagerController");var s;return{init:function(e){return s=e,s.showContactName=!0,s.showFilters=!0,a()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t){function n(){return{loadContacts:function(){return t.all({id:{in:[a.contactId]}}).then(function(e){return e.list})}}}e.debug("LeaveCalendarStaffController");var a;return{init:function(e){return a=e,a.filters.userSettings.contacts_with_leaves=!1,n()}}}n.controller("LeaveCalendarStaffController",["$log","Contact",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),R())})}function h(e){N.injectMonth=!0,k("injected").then(function(){R(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(x)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}} -function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),x(),E(),S("month")}function T(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function R(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function I(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){I("previous"),I("next")}function M(t){t&&(N.selectedMonthIndex=f(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function L(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=T,N.refresh=S,function(){L().then(p).then(v).then(A).then(function(){return a.all([b(),q(),w(),N.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(e){return Object.keys(Y[e.id]||{}).length}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:w(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=D(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function D(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function T(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function S(){return[T(u.statusNames.approved),T(u.statusNames.adminApproved),T(u.statusNames.awaitingApproval),T(u.statusNames.moreInformationRequired)]}function R(){return G.month.loading=!0,a.all([O(),x()]).then(I).then(k).then(function(){H=!0,G.month.loading=!1})}function x(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function O(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function I(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=D(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&R()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=f,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),x("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function T(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function O(e){return te.request.request_type===e}function I(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(O("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||O("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=x,te.isLeaveType=O,te.isNotWorkingDay=I,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),T(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(P).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function q(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(T,function(e){e()})}function P(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],T=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),b(),a.all([C(),q()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t, -Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),T({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function T(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return T(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function x(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function O(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function I(){return S("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function M(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function L(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(L).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([M(),$(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(L).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return T(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){R(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){I[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return I[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function T(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=I[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function O(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){R("from",!0)}):r.resolve()}var I={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=O,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(T)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&O(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),I())})})}function D(){u.isMode("view")||(C(),w(),P())}function T(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),I(),B()}function R(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:I(),B()}function x(e){u.uiOptions.times[e].time=""}function O(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function I(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),I(),u.isCalculationUnit("hours")?O():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){T(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=N,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function T(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Me.isMode("edit")&&(e=e&&(V()||T())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function x(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function O(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==F())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function I(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Me.getStatusFromValue(Me.request.status_id).name)}function N(e){return n.map(De[e],function(e){return Me.requestStatuses[e]})}function F(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():N("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Se,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Oe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?f.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Te++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=F(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:xe}),e}function Q(){if(Ie="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Ie="admin")}).then(function(){return"staff"===Ie&&u(_.permissions.ssp.manage).then(function(e){e&&(Ie="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Ie===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Me.selectedContactId?f.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?f.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Me.absenceTypes=me(Pe.types,e),!Me.absenceTypes.length)return r.reject(Oe)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Se=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,x(),A(),Me.request.isValid().then(ee()&&O).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?Ae():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===Te&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Te>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,De={},Te=0,Se={},Re=[],xe="",Oe="No entitlement",Ie="",Ee=[],Me=n.assign(this,m);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=S,Me.canSubmit=R,Me.closeAlert=I,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=we,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}] -}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===T?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=T(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function x(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=x(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=x(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),E(),S())})}function h(e){N.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(x)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),x(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){L(t())}function I(){L(N.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){O("previous"),O("next")}function L(t){t&&(N.selectedMonthIndex=f(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function M(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=T,N.paginateMonth=D,N.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([b(),q(),w(),N.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:w(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),x()]).then(O).then(k).then(function(){H=!0,G.month.loading=!1})}function x(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function O(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=f,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),x("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=x,te.isLeaveType=I,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){ +Y.sections.entitlements.data=e})}function T(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function x(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function T(){u.isMode("view")||(C(),w(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return c().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function c(){return d?a.resolve(d):o.all()}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:u}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function x(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:xe}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,x(),A(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],xe="",Ie="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId}, +format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file From d8325927a9d6f81b318221f16b678c1548a3f5da Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 29 May 2018 13:36:29 +0100 Subject: [PATCH 167/251] PCHR-3726: Modify addSelectWhereClause Implementation. --- .../CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php index c3b53b2b938..8989b443e4b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php @@ -14,6 +14,8 @@ use CRM_Hrjobcontract_BAO_HRJobContract as JobContract; use CRM_HRLeaveAndAbsences_Factory_LeaveDateAmountDeduction as LeaveDateAmountDeductionFactory; use CRM_HRLeaveAndAbsences_Service_ContactWorkPattern as ContactWorkPatternService; +use CRM_HRLeaveAndAbsences_Service_LeaveRequestRights as LeaveRequestRightsService; +use CRM_HRLeaveAndAbsences_Service_LeaveManager as LeaveManagerService; class CRM_HRLeaveAndAbsences_BAO_LeaveRequest extends CRM_HRLeaveAndAbsences_DAO_LeaveRequest { @@ -1327,10 +1329,20 @@ public function addSelectWhereClause() { } $leaveTable = CRM_HRLeaveAndAbsences_BAO_LeaveRequest::getTableName(); + $leaveRequestRights = new LeaveRequestRightsService(new LeaveManagerService()); - $query = "IN (SELECT DISTINCT contact_id FROM {$leaveTable})"; + $accessibleContacts = $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo(); + $contactsAccessIN = "'" . implode(', ', $accessibleContacts) . "'"; + $notAccessibleLeaveRequestQuery = "SELECT id FROM {$leaveTable} + WHERE contact_id NOT IN ($contactsAccessIN) AND request_type ='" . LeaveRequest::REQUEST_TYPE_TOIL . "'"; - $clauses['contact_id'] = $query; + $query = "NOT IN ($notAccessibleLeaveRequestQuery)"; + + //Setting this to an empty array has same effect as allowing a contact have access to all + //contacts on the leave request table and the Civi default ACL will not be applied + $clauses['contact_id'] = []; + //Remove leave request ID's that the contact does not have access to + $clauses['id'] = $query; CRM_Utils_Hook::selectWhereClause($this, $clauses); From 9bdf504383b1f85afa9ca421af0d5aceffd3299b Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 29 May 2018 13:41:52 +0100 Subject: [PATCH 168/251] PCHR-3726: Fix broken tests. --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 43 +++++-------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index 8a8e8faf9ae..c9e9ea21823 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1770,7 +1770,6 @@ public function testGetAndGetFullHidesRestrictedFieldsForUnAssignedContactForLog 'to_date' => CRM_Utils_Date::processDate('2016-01-05'), 'from_date_type' => 1, 'to_date_type' => 1, - 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL ], true); // The manager will see results for the contact with the inactive leave manager relationship. @@ -1782,14 +1781,12 @@ public function testGetAndGetFullHidesRestrictedFieldsForUnAssignedContactForLog $this->assertEquals(1, $result['count']); $contactData = array_shift($result['values']); $this->assertEquals($staffMember2['id'], $contactData['contact_id']); - $this->assertEquals('', $contactData['toil_duration']); - $this->assertEquals('', $contactData['toil_to_accrue']); + $this->assertEquals('', $contactData['type_id']); $this->assertEquals(1, $resultGetFull['count']); $contactData = array_shift($resultGetFull['values']); $this->assertEquals($staffMember2['id'], $contactData['contact_id']); - $this->assertEquals('', $contactData['toil_duration']); - $this->assertEquals('', $contactData['toil_to_accrue']); + $this->assertEquals('', $contactData['type_id']); $this->assertEquals('', $contactData['balance_change']); } @@ -3677,9 +3674,6 @@ public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOther 'from_date_type' => 1, 'to_date_type' => 1, 'status_id' => 1, - 'toil_to_accrue' => 1, - 'toil_duration' => 60, - 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL, ], true); $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ @@ -3690,9 +3684,6 @@ public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOther 'from_date_type' => 1, 'to_date_type' => 1, 'status_id' => 1, - 'toil_to_accrue' => 1, - 'toil_duration' => 30, - 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL, ], true); //The logged in contact would be able to see results for the other contact too since the Leave ACL @@ -3700,23 +3691,19 @@ public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOther $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); $this->assertEquals(2, $result['count']); $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); - $this->assertEquals($leaveRequest1->toil_to_accrue, $result['values'][0]['toil_to_accrue']); - $this->assertEquals($leaveRequest1->toil_duration, $result['values'][0]['toil_duration']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); - $this->assertEquals('', $result['values'][1]['toil_to_accrue']); - $this->assertEquals('', $result['values'][1]['toil_duration']); + $this->assertEquals('', $result['values'][1]['type_id']); $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); $this->assertEquals(2, $result['count']); $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); - $this->assertEquals($leaveRequest1->toil_to_accrue, $result['values'][0]['toil_to_accrue']); - $this->assertEquals($leaveRequest1->toil_duration, $result['values'][0]['toil_duration']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); $this->assertNotEmpty($result['values'][0]['balance_change']); $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); - $this->assertEquals('', $result['values'][1]['toil_to_accrue']); - $this->assertEquals('', $result['values'][1]['toil_duration']); + $this->assertEquals('', $result['values'][1]['type_id']); $this->assertEquals('', $result['values'][1]['balance_change']); } @@ -3754,9 +3741,6 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog 'from_date_type' => 1, 'to_date_type' => 1, 'status_id' => 1, - 'toil_to_accrue' => 2, - 'toil_duration' => 60, - 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL ], true); $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ @@ -3767,9 +3751,6 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog 'from_date_type' => 1, 'to_date_type' => 1, 'status_id' => 1, - 'toil_to_accrue' => 1, - 'toil_duration' => 60, - 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL ], true); //Results will be returned for both leave contacts even though contact1 is not being managed by @@ -3779,24 +3760,20 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog $this->assertEquals(2, $result['count']); $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); - $this->assertEquals('', $result['values'][0]['toil_duration']); - $this->assertEquals('', $result['values'][0]['toil_to_accrue']); + $this->assertEquals('', $result['values'][0]['type_id']); $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); - $this->assertEquals($leaveRequest2->toil_duration, $result['values'][1]['toil_duration']); - $this->assertEquals($leaveRequest2->toil_to_accrue, $result['values'][1]['toil_to_accrue']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); $this->assertEquals(2, $result['count']); $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); - $this->assertEquals('', $result['values'][0]['toil_duration']); - $this->assertEquals('', $result['values'][0]['toil_to_accrue']); + $this->assertEquals('', $result['values'][0]['type_id']); $this->assertEquals('', $result['values'][0]['balance_change']); $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); - $this->assertEquals($leaveRequest2->toil_duration, $result['values'][1]['toil_duration']); - $this->assertEquals($leaveRequest2->toil_to_accrue, $result['values'][1]['toil_to_accrue']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); $this->assertNotEmpty($result['values'][1]['balance_change']); } From adec5607457d110467e14113cfcc64e13ca5d7a1 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 29 May 2018 13:42:36 +0100 Subject: [PATCH 169/251] PCHR-3726: Remove unnecessary restricted fields. --- .../Handler/GenericLeaveFieldPermissions.php | 12 ------------ .../GenericLeaveFieldPermissionsTest.php | 18 +++--------------- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php index fc1162dfc87..02589ff68e8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php @@ -63,18 +63,6 @@ protected function getDataRowIdentifierLevel() { 'restricted_value' => '', 'level' => 1 ], - 'toil_duration' => [ - 'restricted_value' => '', - 'level' => 1 - ], - 'toil_to_accrue' => [ - 'restricted_value' => '', - 'level' => 1 - ], - 'toil_expiry_date' => [ - 'restricted_value' => '', - 'level' => 1 - ], 'sickness_reason' => [ 'restricted_value' => '', 'level' => 1 diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php index d2d6140c59d..d7dcbe5bcb3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php @@ -95,10 +95,7 @@ class CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissionsTest extend 'from_date_type' => '1', 'to_date' => '2016-10-20 23:45:00', 'to_date_type' => '1', - 'toil_duration' => '200', - 'toil_to_accrue' => '1', - 'toil_expiry_date' => '2016-11-01', - 'request_type' => 'toil', + 'request_type' => 'leave', 'is_deleted' => '0', 'from_date_amount' => '0.00', 'to_date_amount' => '0.00', @@ -122,10 +119,7 @@ class CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissionsTest extend 'from_date_type' => '1', 'to_date' => '2016-12-15 23:45:00', 'to_date_type' => '1', - 'toil_duration' => '360', - 'toil_to_accrue' => '2', - 'toil_expiry_date' => '2016-12-31', - 'request_type' => 'toil', + 'request_type' => 'leave', 'is_deleted' => '0', 'from_date_amount' => '0.00', 'to_date_amount' => '0.00', @@ -191,7 +185,7 @@ class CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissionsTest extend ], ], ]; - + public function testProcessWhenUserIsNotAnAdminUser() { $this->setPermissions(); //User has access to two leave contacts. @@ -209,9 +203,6 @@ public function testProcessWhenUserIsNotAnAdminUser() { $expectedParams['values'][2]['from_date_amount'] = ''; $expectedParams['values'][2]['to_date_amount'] = ''; $expectedParams['values'][2]['balance_change'] = ''; - $expectedParams['values'][2]['toil_duration'] = ''; - $expectedParams['values'][2]['toil_to_accrue'] = ''; - $expectedParams['values'][2]['toil_expiry_date'] = ''; $expectedParams['values'][2]['type_id'] = ''; $expectedParams['values'][4]['sickness_reason'] = ''; $expectedParams['values'][4]['from_date_amount'] = ''; @@ -266,9 +257,6 @@ public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEven $expectedParams['values'][2]['from_date_amount'] = ''; $expectedParams['values'][2]['to_date_amount'] = ''; $expectedParams['values'][2]['balance_change'] = ''; - $expectedParams['values'][2]['toil_duration'] = ''; - $expectedParams['values'][2]['toil_to_accrue'] = ''; - $expectedParams['values'][2]['toil_expiry_date'] = ''; $expectedParams['values'][2]['type_id'] = ''; $expectedParams['values'][4]['sickness_reason'] = ''; $expectedParams['values'][4]['from_date_amount'] = ''; From 03ea1c54ac925f713993b410ee213549033d24d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Tue, 29 May 2018 09:23:56 -0400 Subject: [PATCH 170/251] PCHR-3515: Update leave calendar component tests to reflect staff controller changes --- .../leave-calendar.component.spec.js | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index cf3687b959f..9f1461f4e0d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -168,8 +168,8 @@ compileComponent(); }); - it('sets the filter to *off* by default', function () { - expect(controller.filters.userSettings.contacts_with_leaves).toBe(false); + it('sets the filter to *on* by default', function () { + expect(controller.filters.userSettings.contacts_with_leaves).toBe(true); }); }); }); @@ -350,6 +350,8 @@ describe('when filter by assignee is set to "Me"', function () { beforeEach(function () { + Contract.all.calls.reset(); + Contact.all.calls.reset(); selectFilterByAssignee('me'); }); @@ -512,7 +514,25 @@ describe('filter option values', function () { var optionGroups = ['hrjc_region', 'hrjc_location', 'hrjc_level_type', 'hrjc_department']; - describe('when the filters should not be shown', function () { + describe('when the subcontroller does not show filters', function () { + beforeEach(function () { + var staffController = $controller('LeaveCalendarStaffController').init(controller); + + // mocks the staff sub controller to hide the filters: + $controllerProvider.register('LeaveCalendarStaffController', function () { + return { + init: function (vm) { + vm.showFilters = false; + + return staffController; + } + }; + }); + + OptionGroup.valuesOf.calls.reset(); + compileComponent(); + }); + it('does not fetch the filters option values', function () { expect(OptionGroup.valuesOf).not.toHaveBeenCalledWith(optionGroups); }); From 1ce9f40e62d83dcc465d10bbd7bdb1efa6b2b3f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Tue, 29 May 2018 09:29:12 -0400 Subject: [PATCH 171/251] PCHR-3515: PR Feedback --- .../js/angular/dist/absence-tab.min.js | 2 +- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../shared/services/leave-calendar.service.js | 18 +++++++++--------- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 1eeed58c61c..c8772672cc1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ !function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday", cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],t.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return Y[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(n){var t=Object.keys(G[n.id]||{}).length,a=e.includes(V.showTheseContacts,n.id);return t||a}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(G[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);G[e.contact_id]=G[e.contact_id]||{},n.forEach(function(n){G[e.contact_id][n.date]||(G[e.contact_id][n.date]=[]),G[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonth",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.month&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return V.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){W=!0,V.month.loading=!1})}function O(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function L(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){Y=e.indexBy(n,"contact_id")})}function S(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(G,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);G[n.contact_id]=G[n.contact_id]||{},t.forEach(function(t){e.remove(G[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return G[t]&&G[t][n.date]?G[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){V.currentPage=0,V.visible=!0,(n||!W)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],Y={},G={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.month).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){ -t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return u().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function u(){return d?a.resolve(d):s.all()}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:c}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){ +t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){ o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 316e5fc24c5..ceec1e2f839 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}), define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(), -u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return c().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function c(){return d?a.resolve(d):o.all()}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:u}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){ +u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){ if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index a34114e3bb6..b0ba1c9fb69 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=M[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function M(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),S())})}function h(e){N.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),M(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&M).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){L(t())}function I(){L(N.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){x("previous"),x("next")}function L(t){t&&(N.selectedMonthIndex=m(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=T,N.paginateMonth=D,N.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),N.showFilters?$():e.noop])}).then(function(){h(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(M(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r }}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),M()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:M(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function M(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a), -a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function M(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){M(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return c().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function c(){return d?a.resolve(d):o.all()}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:u}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function M(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():M()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Me=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=x,Le.deleteLeaveRequest=E,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId), +a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function M(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){M(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function M(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():M()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Me=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=x,Le.deleteLeaveRequest=E,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId), Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 686d54c51dc..9f0e3349b7a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===T?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=T(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function x(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=x(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=x(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),E(),S())})}function h(e){N.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(x)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),x(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){L(t())}function I(){L(N.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){O("previous"),O("next")}function L(t){t&&(N.selectedMonthIndex=f(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function M(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=T,N.paginateMonth=D,N.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([b(),q(),w(),N.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:w(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),x()]).then(O).then(k).then(function(){H=!0,G.month.loading=!1})}function x(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function O(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=f,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),x("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=x,te.isLeaveType=I,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){ -Y.sections.entitlements.data=e})}function T(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function x(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function T(){u.isMode("view")||(C(),w(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return c().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function c(){return d?a.resolve(d):o.all()}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:u}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function x(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:xe}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,x(),A(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],xe="",Ie="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId}, +Y.sections.entitlements.data=e})}function T(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function x(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function T(){u.isMode("view")||(C(),w(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function x(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:xe}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,x(),A(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],xe="",Ie="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId}, format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js index 9857a856da9..3a53b53c8f3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js @@ -63,6 +63,15 @@ define([ }); } + /** + * Returns a list of all contracts. The result is cached locally. + * + * @return {Promise} + */ + function loadContracts () { + return contracts ? $q.resolve(contracts) : Contract.all(); + } + /** * Returns a list of contacts reduced by the leave calendar filters and * sorts them by the contact's display name. @@ -76,15 +85,6 @@ define([ }); } - /** - * Returns a list of all contracts. The result is cached locally. - * - * @return {Promise} - */ - function loadContracts () { - return contracts ? $q.resolve(contracts) : Contract.all(); - } - /** * Returns a map of filters to pass to the Contact API. * From f858263834df8062cb5d72697ad7bd2de0805922 Mon Sep 17 00:00:00 2001 From: Samson Alajede Date: Tue, 29 May 2018 14:44:53 +0100 Subject: [PATCH 172/251] PCHR-3462: Help-text directive refactoring --- contactsummary/scss/components/_info-button.scss | 8 -------- org.civicrm.bootstrapcivihr/css/civihr.css | 2 +- .../scss/components/_help-text.scss | 4 ++++ org.civicrm.reqangular/dist/reqangular.min.js | 4 ++-- org.civicrm.reqangular/src/common/modules/templates.js | 4 ++-- .../src/common/templates/help-text.html | 4 ++-- .../test/directives/help-text.directive.spec.js | 4 ++-- 7 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 contactsummary/scss/components/_info-button.scss create mode 100644 org.civicrm.bootstrapcivihr/scss/components/_help-text.scss diff --git a/contactsummary/scss/components/_info-button.scss b/contactsummary/scss/components/_info-button.scss deleted file mode 100644 index cee121bca94..00000000000 --- a/contactsummary/scss/components/_info-button.scss +++ /dev/null @@ -1,8 +0,0 @@ -button.info-button { - background: none; - border: none; - - .fa { - color: $brand-primary; - } -} diff --git a/org.civicrm.bootstrapcivihr/css/civihr.css b/org.civicrm.bootstrapcivihr/css/civihr.css index 677024b3bb2..16a62379b6e 100644 --- a/org.civicrm.bootstrapcivihr/css/civihr.css +++ b/org.civicrm.bootstrapcivihr/css/civihr.css @@ -1 +1 @@ -#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4D4D69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase}#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff}#bootstrap-theme .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub}.crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .chr_appraisal-cycle-summary__details>.chr_appraisal-cycle-summary__meta{margin-right:15px}#bootstrap-theme .chr_appraisal-cycle-summary__actions{display:inline-block}#bootstrap-theme .chr_appraisal-cycle-summary__actions__toggle{color:inherit}#bootstrap-theme .chr_appraisal-cycle-summary__meta{font-size:16px;font-weight:600;line-height:1.1}#bootstrap-theme .chr_leave-list:before, #bootstrap-theme .chr_leave-list:after{content:" ";display:table}#bootstrap-theme .chr_leave-list:after{clear:both}#bootstrap-theme .chr_leave-list>.chr_leave-list__type{margin-bottom:10px}#bootstrap-theme .chr_leave-list__type>.chr_leave-list__type__color{margin-right:5px}#bootstrap-theme .chr_leave-list__type__color{background:#E8EEF0;display:inline-block;height:15px;vertical-align:sub;width:15px}#bootstrap-theme .chr_leave-list__type__count{float:right}#bootstrap-theme .chr_scroll-shadows__wrapper{overflow:hidden;position:relative}#bootstrap-theme .chr_scroll-shadows__shadows{overflow-x:auto}#bootstrap-theme .chr_scroll-shadows__shadows::before, #bootstrap-theme .chr_scroll-shadows__shadows::after{box-shadow:0 0 10px 1px rgba(48,40,40,0.5);content:'';display:block;height:calc(100% - 10px);opacity:0;position:absolute;top:5px;transition:opacity 0.2s ease-out;width:1px;z-index:1}#bootstrap-theme .chr_scroll-shadows__shadows::before{left:-1px}#bootstrap-theme .chr_scroll-shadows__shadows::after{right:-1px}#bootstrap-theme .chr_scroll-shadows__shadows--show-left::before, #bootstrap-theme .chr_scroll-shadows__shadows--show-right::after{opacity:1}#bootstrap-theme .chr_scroll-shadows__content{display:inline-block;min-width:100%}#bootstrap-theme .chr_sickness-days{display:inline-block;width:165px}#bootstrap-theme .chr_sickness-days--danger .chr_sickness-days__count{background:#CF3458}#bootstrap-theme .chr_sickness-days__count{background:#44CB7E;color:white;font-size:6.5384615385em;text-align:center}#bootstrap-theme .chr_sickness-days__label{background:#E8EEF0;font-size:1.3846153846em;padding:5px 0;text-align:center;text-transform:uppercase}#bootstrap-theme .chr_steps{margin:0}#bootstrap-theme .chr_steps:before, #bootstrap-theme .chr_steps:after{content:" ";display:table}#bootstrap-theme .chr_steps:after{clear:both}#bootstrap-theme .chr_steps__step{display:table;float:left}#bootstrap-theme .chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:16px}#bootstrap-theme .chr_steps__step:not(:last-child){margin-right:6px}#bootstrap-theme .chr_steps__step:not(:last-child) .chr_steps__step__arrow:before{border-left-color:#fff;margin-left:6px;z-index:1}#bootstrap-theme .chr_steps__step__arrow{background:#4D4D69;border-color:#4D4D69;color:#fff;display:table-cell;height:24px;line-height:24px;padding:0 10px 0 10px;position:relative}#bootstrap-theme .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps__step__arrow:before{content:"";border-color:transparent;border-style:solid;border-width:12px 0 12px 6px;display:block;height:0;left:100%;margin-top:-12px;position:absolute;top:50%;width:0}#bootstrap-theme .chr_steps__step__arrow:after{border-left-color:inherit;z-index:2}#bootstrap-theme .chr_steps__step__legend{display:table-row}#bootstrap-theme .chr_steps__step__legend>.chr_steps__step__legend__content{margin-top:10px}#bootstrap-theme .chr_steps__step__legend__content{background:white;border:1px solid #4D4D69;font-size:12px;padding:10px 4px;width:100%}#bootstrap-theme .chr_steps--compact>.chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:11px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow{font-size:12px;font-weight:600;height:28px;line-height:28px;padding:0 5px 0 10px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:before{border-width:14px 0 14px 6px;margin-top:-14px}#bootstrap-theme .chr_steps--flex{display:flex}#bootstrap-theme .chr_steps--flex .chr_steps__step{display:block;flex-grow:1;float:none}#bootstrap-theme .chr_steps--flex .chr_steps__step__arrow{display:inline-block;text-align:center;width:100%}#bootstrap-theme .chr_steps--flex .chr_steps__step__legend{display:block}#bootstrap-theme .chr_steps__step--danger>.chr_steps__step__arrow{background:#CF3458;border-color:#CF3458}#bootstrap-theme .chr_steps__step--danger .chr_steps__step__legend__content{border-color:#CF3458}#bootstrap-theme .chr_steps__step--primary>.chr_steps__step__arrow{background:#0071BD;border-color:#0071BD}#bootstrap-theme .chr_steps__step--primary .chr_steps__step__legend__content{border-color:#0071BD}#bootstrap-theme .chr_timeline{margin:0}#bootstrap-theme .chr_timeline:before, #bootstrap-theme .chr_timeline:after{content:" ";display:table}#bootstrap-theme .chr_timeline:after{clear:both}#bootstrap-theme .chr_timeline>.chr_timeline__entry{padding:2.6923076923em 0 0 3.0769230769em;position:relative}#bootstrap-theme .chr_timeline>.chr_timeline__entry:last-child{padding-bottom:2.6923076923em}#bootstrap-theme .chr_timeline__entry:after{content:"";border:3px solid #F3F6F7;bottom:0;left:7px;position:absolute;top:0}#bootstrap-theme .chr_timeline__entry:before{content:"";background:#F3F6F7;border:2px solid #E8EEF0;border-radius:50%;display:inline-block;height:20px;left:0;position:absolute;vertical-align:bottom;width:20px;z-index:2}#bootstrap-theme .chr_timeline__entry--future:before{border-color:#0071BD}#bootstrap-theme .chr_timeline__entry--past:before{border-color:#CF3458}#bootstrap-theme .chr_timeline__entry__name{color:#464354;font-weight:600;display:block;margin-bottom:.3846153846em}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#F3F6F7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071BD !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071BD !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4D4D69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4D4D69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4D4D69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#F3F6F7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4D4D69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#CF3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #CF3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#F3F6F7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#E8EEF0 !important}#bootstrap-theme .civihr-ui-select__content{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__content-multiple{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__custom-options{background:#585878 !important;padding:5px 10px !important;margin:5px 0 !important;border:solid 1px #4D4D69 !important;color:#555}#bootstrap-theme .civihr-ui-select__refine-search{padding-top:10px !important}#bootstrap-theme .civihr-ui-select__button-group{border-top:solid 1px #4D4D69 !important;padding-top:10px !important;margin-top:10px !important}#bootstrap-theme .civihr-ui-select__button{display:inline-block;cursor:pointer}#bootstrap-theme .civihr-ui-select__button:not(:last-child){padding-right:5px !important}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#F3F6F7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071BD !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071BD !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4D4D69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4D4D69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4D4D69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#F3F6F7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4D4D69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#CF3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #CF3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .button-list{display:flex;justify-content:space-between}#bootstrap-theme .button-list__button{cursor:pointer}#bootstrap-theme .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#F3F6F7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#E8EEF0 !important}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme .loading-indicator{text-align:center}#bootstrap-theme .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000}#bootstrap-theme #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto}#bootstrap-theme #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal}#bootstrap-theme .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bootstrap-theme .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em}#bootstrap-theme .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--default-color:after{color:#82BD58}#bootstrap-theme .chr_logo--default-color:before{color:#1B6F90}#bootstrap-theme .chr_logo--default-color.chr_logo--full>i:after{color:#026085}#bootstrap-theme .chr_logo--default-size{font-size:20px}#bootstrap-theme .chr_logo--full:after{left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative}#bootstrap-theme .chr_profile-card{display:inline-block}#bootstrap-theme .chr_profile-card__name{display:table-cell;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture>img{background:#E8EEF0;border-radius:50%;width:100%;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px}#bootstrap-theme .chr_profile-card__picture--small>img{height:34px;width:34px}#bootstrap-theme .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative}#bootstrap-theme .chr_user-menu:hover{background:#F3F6F7}#bootstrap-theme .chr_user-menu:hover>.chr_user-menu__dropdown{display:block}#bootstrap-theme .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){#bootstrap-theme .chr_user-menu__data>.chr_user-menu__arrow{display:none}}#bootstrap-theme .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99}#bootstrap-theme .chr_user-menu__dropdown ul{list-style-type:none;margin:0}#bootstrap-theme .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap}#bootstrap-theme .chr_user-menu__dropdown li>a, #bootstrap-theme .chr_user-menu__dropdown li>span{padding:0 30px 0 20px}#bootstrap-theme .chr_user-menu__dropdown a{color:#464354;display:block}#bootstrap-theme .chr_user-menu__dropdown a:hover{background:#F3F6F7;color:#464354;text-decoration:none}#bootstrap-theme .chr_user-menu__dropdown a>i{margin-right:10px}#bootstrap-theme .chr_user-menu__dropdown__username{color:#464354}#bootstrap-theme .chr_user-menu__dropdown__username:after{border-top:1px solid #D3DEE2;content:'';display:block;height:0;margin:0 30px 0 20px}.page-civicrm-activity .crm-search-tasks, .page-civicrm-case .crm-search-tasks{margin:20px 0;padding:18px 15px;background-color:#fff;box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border-radius:0}.page-civicrm-activity .crm-search-tasks .form-layout-compressed, .page-civicrm-case .crm-search-tasks .form-layout-compressed{margin:0}.page-civicrm-activity .crm-search-tasks .select2-container, .page-civicrm-case .crm-search-tasks .select2-container{width:180px !important}.page-civicrm-activity #searchForm{box-sizing:border-box}.page-civicrm-activity #searchForm tr:not(#activityCustom) td{padding:10px 20px}.page-civicrm-activity #searchForm tr:nth-child(n+8):nth-child(-n+9){display:none}.page-civicrm-activity #searchForm tr td{border:0 !important;padding:0}.page-civicrm-activity #searchForm tr td.font-size12pt{font-size:13px}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh{float:right !important;margin:0}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh>.crm-form-submit{margin-right:0 !important}.page-civicrm-activity #searchForm tr td .select2-choices, .page-civicrm-activity #searchForm tr td .select2-choice, .page-civicrm-activity #searchForm tr td #activity_subject{min-width:329px}.page-civicrm-activity #searchForm .crm-i{display:none}.page-civicrm-activity .ui-dialog .crm-submit-buttons{display:none}.page-civicrm-activity .ui-dialog table tr{border-bottom:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1{border-bottom:none;padding:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 td.label{display:table-cell}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 .crm-accordion-wrapper{margin-left:5px;margin-right:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-block{box-shadow:none}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup{padding:0;margin-bottom:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup #Activity_Custom_Fields__{padding:0 20px}.page-civicrm-case .font-size12pt{font-size:13px}.page-civicrm-case .font-size12pt label{width:212px;display:inline-block}.page-civicrm-case .crm-case-search-form-block tr td.crm-submit-buttons{padding:12.5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td{padding:5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td:first-child{width:220px;box-sizing:border-box}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td .crm-button_qf_Search_refresh{float:right !important}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td #_qf_Search_refresh-top{margin-right:0 !important}.page-civicrm-case .crm-case-search-form-block tr .crm-i{display:none}.page-civicrm-case .crm-case-search-form-block #Application{margin-left:-5px;margin-right:-5px}.page-civicrm-case .crm-case-search-form-block #Application .crm-accordion-body td{padding-left:0 !important}.page-civicrm-case .caseSelector>tbody>tr .dataTable tr>td:first-child, .page-civicrm-case .caseSelector>tbody>tr .dataTable tr>th:first-child{text-align:center}.page-civicrm-case .caseSelector>tbody>tr th a{color:#464354}.page-civicrm-case .caseSelector>tbody>tr .nestedActivitySelector td:nth-child(8){text-align:left !important}.page-civicrm-case .caseSelector>tbody>tr .paginate_button{line-height:normal}.page-civicrm-case .caseSelector>tbody>tr .ui-buttonset .ui-button{padding:5px 10px}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']{margin:8px 20px !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']:first-child{margin-right:0 !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect tr:first-child td:nth-child(2){vertical-align:bottom;padding-bottom:4px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview{margin-left:20px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview .crm-i{display:none}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block{padding-top:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>fieldset{margin:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed{margin-top:0}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.select2-container, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-text, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-date-wrapper .crm-form-text:nth-child(2){min-width:200px}@media (max-width: 1200px) and (min-width: 768px){.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-form-multiselect{min-width:160px;width:160px}}.page-civicrm-vacancy #addMorePermission{background:#0071BD;border-color:#0071BD;border-radius:3px;color:#fff;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;padding:8px 12px;text-shadow:none;text-transform:uppercase}.page-civicrm-vacancy #addMorePermission:hover{background:#58b7d1}.page-civicrm-vacancy #addMorePermission>.add-icon{background-image:none;text-indent:0;margin-right:3px}.page-civicrm-vacancy #addMorePermission>.add-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff;position:relative;top:-1px}.page-civicrm-vacancy table.vacancy-popup{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies .description{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies td>a{color:#0071BD}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Search .crm-search-form-block{margin-bottom:20px}.page-civicrm-vacancy #searchForm{padding:20px}.page-civicrm-vacancy #searchForm td{padding:0}.page-civicrm-vacancy #searchForm tr:nth-child(2) td{padding:20px 0}.page-civicrm-vacancy #searchForm #_qf_Search_refresh{margin-bottom:0 !important}.page-civicrm-vacancy #searchForm .listing-box{border-color:#4D4D69}.page-civicrm-vacancy #searchForm .listing-box>div{background-color:transparent}.page-civicrm-vacancy #searchForm .listing-box>div label{color:#4D4D69;font-weight:normal !important;padding:5px}.page-civicrm-vacancy #searchForm .font-size12pt{font-size:12px}.page-civicrm-vacancy #searchForm .crm-form-text{width:312px}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content .crm-block{box-shadow:none}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr{border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr td{padding-left:0;border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2){vertical-align:top}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2) input[type='button']:first-child{margin-left:0 !important;width:71px;display:block}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .ui-dialog-buttonpane{margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-vacancy-summary>div:not(.collapsed) .crm-accordion-header::before{content:""}.page-civicrm-vacancy .hr-pipeline-tab .crm-accordion-header h2{color:#464354 !important;display:inline-block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy{width:49%;margin-bottom:20px;border:1px solid #E8EEF0;border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div{padding:0;font-weight:normal}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table{width:100%;background-color:#fff;border:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2) td{line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td{color:#586277;padding:0 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td:not(:first-child){padding:10px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3{background-color:#4D4D69;padding:8px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a{color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon{background-image:none;text-indent:0;top:-3px;margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:hover:after{opacity:.8}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage{border-left:0 !important;width:auto;display:none}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage:first-child{display:block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage a{font-weight:600;color:#0071BD;right:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:first-child td{padding:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2){font-weight:600}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity{border:1px solid transparent;overflow:hidden;border-radius:2px}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .hr-recent-activity-title{background-color:#4D4D69;padding:8px 15px;line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight{width:calc(100% + 1px)}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight tr .hr-recent-activity-block{font-size:13px;color:#586277}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile{padding:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile legend{padding-top:20px}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc} #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000} #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto} #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal} .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em} .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0} .chr_logo--default-color:after{color:#82BD58} .chr_logo--default-color:before{color:#1B6F90} .chr_logo--default-color.chr_logo--full>i:after{color:#026085} .chr_logo--default-size{font-size:20px} .chr_logo--full:after{left:0;position:absolute;top:0} .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative} .chr_profile-card{display:inline-block} .chr_profile-card__name{display:table-cell;vertical-align:middle} .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle} .chr_profile-card__picture>img{background:#E8EEF0;border-radius:50%;width:100%;vertical-align:middle} .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px} .chr_profile-card__picture--small>img{height:34px;width:34px} .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative} .chr_user-menu:hover{background:#F3F6F7} .chr_user-menu:hover>.chr_user-menu__dropdown{display:block} .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){ .chr_user-menu__data>.chr_user-menu__arrow{display:none}} .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99} .chr_user-menu__dropdown ul{list-style-type:none;margin:0} .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap} .chr_user-menu__dropdown li>a, .chr_user-menu__dropdown li>span{padding:0 30px 0 20px} .chr_user-menu__dropdown a{color:#464354;display:block} .chr_user-menu__dropdown a:hover{background:#F3F6F7;color:#464354;text-decoration:none} .chr_user-menu__dropdown a>i{margin-right:10px} .chr_user-menu__dropdown__username{color:#464354} .chr_user-menu__dropdown__username:after{border-top:1px solid #D3DEE2;content:'';display:block;height:0;margin:0 30px 0 20px} #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4D4D69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase} #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff} .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub} .crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} +#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4d4d69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase}#bootstrap-theme #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff}#bootstrap-theme .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub}.crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .chr_appraisal-cycle-summary__details>.chr_appraisal-cycle-summary__meta{margin-right:15px}#bootstrap-theme .chr_appraisal-cycle-summary__actions{display:inline-block}#bootstrap-theme .chr_appraisal-cycle-summary__actions__toggle{color:inherit}#bootstrap-theme .chr_appraisal-cycle-summary__meta{font-size:16px;font-weight:600;line-height:1.1}#bootstrap-theme .help-text-link{display:inline-block;padding-left:5px}#bootstrap-theme .chr_leave-list:before, #bootstrap-theme .chr_leave-list:after{content:" ";display:table}#bootstrap-theme .chr_leave-list:after{clear:both}#bootstrap-theme .chr_leave-list>.chr_leave-list__type{margin-bottom:10px}#bootstrap-theme .chr_leave-list__type>.chr_leave-list__type__color{margin-right:5px}#bootstrap-theme .chr_leave-list__type__color{background:#e8eef0;display:inline-block;height:15px;vertical-align:sub;width:15px}#bootstrap-theme .chr_leave-list__type__count{float:right}#bootstrap-theme .chr_scroll-shadows__wrapper{overflow:hidden;position:relative}#bootstrap-theme .chr_scroll-shadows__shadows{overflow-x:auto}#bootstrap-theme .chr_scroll-shadows__shadows::before, #bootstrap-theme .chr_scroll-shadows__shadows::after{box-shadow:0 0 10px 1px rgba(48,40,40,0.5);content:'';display:block;height:calc(100% - 10px);opacity:0;position:absolute;top:5px;transition:opacity 0.2s ease-out;width:1px;z-index:1}#bootstrap-theme .chr_scroll-shadows__shadows::before{left:-1px}#bootstrap-theme .chr_scroll-shadows__shadows::after{right:-1px}#bootstrap-theme .chr_scroll-shadows__shadows--show-left::before, #bootstrap-theme .chr_scroll-shadows__shadows--show-right::after{opacity:1}#bootstrap-theme .chr_scroll-shadows__content{display:inline-block;min-width:100%}#bootstrap-theme .chr_sickness-days{display:inline-block;width:165px}#bootstrap-theme .chr_sickness-days--danger .chr_sickness-days__count{background:#cf3458}#bootstrap-theme .chr_sickness-days__count{background:#44cb7e;color:white;font-size:6.5384615385em;text-align:center}#bootstrap-theme .chr_sickness-days__label{background:#e8eef0;font-size:1.3846153846em;padding:5px 0;text-align:center;text-transform:uppercase}#bootstrap-theme .chr_steps{margin:0}#bootstrap-theme .chr_steps:before, #bootstrap-theme .chr_steps:after{content:" ";display:table}#bootstrap-theme .chr_steps:after{clear:both}#bootstrap-theme .chr_steps__step{display:table;float:left}#bootstrap-theme .chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:16px}#bootstrap-theme .chr_steps__step:not(:last-child){margin-right:6px}#bootstrap-theme .chr_steps__step:not(:last-child) .chr_steps__step__arrow:before{border-left-color:#fff;margin-left:6px;z-index:1}#bootstrap-theme .chr_steps__step__arrow{background:#4d4d69;border-color:#4d4d69;color:#fff;display:table-cell;height:24px;line-height:24px;padding:0 10px 0 10px;position:relative}#bootstrap-theme .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps__step__arrow:before{content:"";border-color:transparent;border-style:solid;border-width:12px 0 12px 6px;display:block;height:0;left:100%;margin-top:-12px;position:absolute;top:50%;width:0}#bootstrap-theme .chr_steps__step__arrow:after{border-left-color:inherit;z-index:2}#bootstrap-theme .chr_steps__step__legend{display:table-row}#bootstrap-theme .chr_steps__step__legend>.chr_steps__step__legend__content{margin-top:10px}#bootstrap-theme .chr_steps__step__legend__content{background:white;border:1px solid #4d4d69;font-size:12px;padding:10px 4px;width:100%}#bootstrap-theme .chr_steps--compact>.chr_steps__step:not(:first-child) .chr_steps__step__arrow{padding-left:11px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow{font-size:12px;font-weight:600;height:28px;line-height:28px;padding:0 5px 0 10px}#bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:after, #bootstrap-theme .chr_steps--compact .chr_steps__step__arrow:before{border-width:14px 0 14px 6px;margin-top:-14px}#bootstrap-theme .chr_steps--flex{display:flex}#bootstrap-theme .chr_steps--flex .chr_steps__step{display:block;flex-grow:1;float:none}#bootstrap-theme .chr_steps--flex .chr_steps__step__arrow{display:inline-block;text-align:center;width:100%}#bootstrap-theme .chr_steps--flex .chr_steps__step__legend{display:block}#bootstrap-theme .chr_steps__step--danger>.chr_steps__step__arrow{background:#cf3458;border-color:#cf3458}#bootstrap-theme .chr_steps__step--danger .chr_steps__step__legend__content{border-color:#cf3458}#bootstrap-theme .chr_steps__step--primary>.chr_steps__step__arrow{background:#0071bd;border-color:#0071bd}#bootstrap-theme .chr_steps__step--primary .chr_steps__step__legend__content{border-color:#0071bd}#bootstrap-theme .chr_timeline{margin:0}#bootstrap-theme .chr_timeline:before, #bootstrap-theme .chr_timeline:after{content:" ";display:table}#bootstrap-theme .chr_timeline:after{clear:both}#bootstrap-theme .chr_timeline>.chr_timeline__entry{padding:2.6923076923em 0 0 3.0769230769em;position:relative}#bootstrap-theme .chr_timeline>.chr_timeline__entry:last-child{padding-bottom:2.6923076923em}#bootstrap-theme .chr_timeline__entry:after{content:"";border:3px solid #f3f6f7;bottom:0;left:7px;position:absolute;top:0}#bootstrap-theme .chr_timeline__entry:before{content:"";background:#f3f6f7;border:2px solid #e8eef0;border-radius:50%;display:inline-block;height:20px;left:0;position:absolute;vertical-align:bottom;width:20px;z-index:2}#bootstrap-theme .chr_timeline__entry--future:before{border-color:#0071bd}#bootstrap-theme .chr_timeline__entry--past:before{border-color:#cf3458}#bootstrap-theme .chr_timeline__entry__name{color:#464354;font-weight:600;display:block;margin-bottom:.3846153846em}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071bd !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071bd !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4d4d69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4d4d69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4d4d69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4d4d69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#cf3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #cf3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#f3f6f7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#e8eef0 !important}#bootstrap-theme .civihr-ui-select__content{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__content-multiple{padding:0 5px !important}#bootstrap-theme .civihr-ui-select__custom-options{background:#585878 !important;padding:5px 10px !important;margin:5px 0 !important;border:solid 1px #4d4d69 !important;color:#555}#bootstrap-theme .civihr-ui-select__refine-search{padding-top:10px !important}#bootstrap-theme .civihr-ui-select__button-group{border-top:solid 1px #4d4d69 !important;padding-top:10px !important;margin-top:10px !important}#bootstrap-theme .civihr-ui-select__button{display:inline-block;cursor:pointer}#bootstrap-theme .civihr-ui-select__button:not(:last-child){padding-right:5px !important}#bootstrap-theme .civihr-ui-select.open, #bootstrap-theme .civihr-ui-select .select2-drop-active, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{background:#fff !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close, #bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select a.select2-choice, #bootstrap-theme .civihr-ui-select .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{background:none !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen, #bootstrap-theme .civihr-ui-select.open .ui-select-search, #bootstrap-theme .civihr-ui-select.ui-select-multiple, #bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{border-width:1px !important;border-style:solid !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select.open .select2-search::after, #bootstrap-theme .civihr-ui-select .select2-arrow::before, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen, #bootstrap-theme .civihr-ui-select .select2-input, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{line-height:28px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before, #bootstrap-theme .civihr-ui-select .select2-chosen, #bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{font-size:13px !important}#bootstrap-theme .civihr-ui-select.open .select2-arrow, #bootstrap-theme .civihr-ui-select:not(.open) .select2-choice, #bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow, #bootstrap-theme .civihr-ui-select .ui-select-choices, #bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{padding:0 !important}#bootstrap-theme .civihr-ui-select{color:#555;width:100% !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled{color:#8b8baa !important;border-color:#8b8baa !important;background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-chosen{color:#8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-arrow::before, #bootstrap-theme .civihr-ui-select:not(.open).form-control.select2-container-disabled .select2-choices::before{border-color:#8b8baa !important;color:#8b8baa !important}#bootstrap-theme .civihr-ui-select, #bootstrap-theme .civihr-ui-select *{border-color:rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select>*, #bootstrap-theme .civihr-ui-select{border-radius:2px !important;box-shadow:none !important}#bootstrap-theme .civihr-ui-select .select2-drop{border-radius:0 0 2px 2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{height:15px;left:unset !important;right:45px !important;width:15px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close{background:none !important;top:2px !important}#bootstrap-theme .civihr-ui-select .select2-search-choice-close::before{content:'\f057';line-height:inherit !important;vertical-align:middle !important;text-align:right;display:block}#bootstrap-theme .civihr-ui-select.open:not(.ng-invalid), #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid) *, #bootstrap-theme .civihr-ui-select.open:not(.ng-invalid).form-control{border-color:#0071bd !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{color:#7d7d9f !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen{border:0 !important}#bootstrap-theme .civihr-ui-select.open .select2-chosen>span:first-of-type{max-width:calc(100% - 20px);display:block;overflow:hidden;text-overflow:ellipsis}#bootstrap-theme .civihr-ui-select.open .select2-choice{border-bottom:0 !important}#bootstrap-theme .civihr-ui-select.open .ui-select-search{padding:0 5px !important;margin-top:5px !important}#bootstrap-theme .civihr-ui-select.open .select2-search-choice-close::before{display:none}#bootstrap-theme .civihr-ui-select.open .select2-search::after{position:relative;content:'\f002';color:#555 !important;right:30px}#bootstrap-theme .civihr-ui-select:not(.open){border-color:rgba(0,0,0,0.15) !important;padding:0 0 0 10px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-choice{border:0 !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow{width:31px !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-arrow::before{width:100%;display:block;text-align:center;line-height:30px;content:'\f0d7'}#bootstrap-theme .contact-lookup.civihr-ui-select:not(.open) .select2-arrow::before{content:'\f002' !important}#bootstrap-theme .civihr-ui-select:not(.open):not(.select2-container-disabled) .select2-arrow{border-left:solid 1px rgba(0,0,0,0.15) !important}#bootstrap-theme .civihr-ui-select:not(.open).select2-container-disabled .select2-arrow{border-left:solid 1px #8b8baa !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen{max-width:calc(100% - 30px) !important}#bootstrap-theme .civihr-ui-select:not(.open) .select2-chosen:not(.empty){color:#0071bd !important}#bootstrap-theme .civihr-ui-select:not(.open) .ui-select-match[allow-clear] .select2-chosen{max-width:calc(100% - 60px) !important}#bootstrap-theme .civihr-ui-select .select2-input{width:inherit}#bootstrap-theme .civihr-ui-select .select2-arrow{cursor:pointer !important;right:0 !important;top:0 !important}#bootstrap-theme .civihr-ui-select .select2-arrow::before{color:#4d4d69;content:'\f0d8'}#bootstrap-theme .civihr-ui-select .select2-chosen{color:#4d4d69 !important;padding-left:5px !important}#bootstrap-theme .civihr-ui-select .select2-drop-active{border-top:0 !important;border-style:solid;border-width:1px !important;opacity:1 !important}#bootstrap-theme .civihr-ui-select a.select2-choice:hover{text-decoration:none !important}#bootstrap-theme .civihr-ui-select .ui-select-match{height:100% !important}#bootstrap-theme .civihr-ui-select .ui-select-choices{margin:5px 0 0 !important}#bootstrap-theme .civihr-ui-select .select2-result-label{padding:5px 10px !important;color:#4d4d69}#bootstrap-theme .civihr-ui-select .select2-highlighted{background:#f3f6f7 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple{height:100% !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item{box-sizing:border-box !important;line-height:17px !important;margin:5px 5px 5px 0 !important;padding:0 22px 0 5px !important;border-radius:0 !important;background:none}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close{right:5px !important;top:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .ui-select-match-item .select2-search-choice-close::before{display:block}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices{box-shadow:none !important;-moz-padding-start:0 !important;-webkit-padding-start:0 !important;margin-bottom:0 !important;width:100% !important;border:0;background-image:none !important;background:none !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-choices::before{color:#4d4d69;padding-left:13px !important;width:26px !important;height:30px;top:0 !important;pointer-events:none;position:absolute}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open){border-color:rgba(0,0,0,0.15) !important;padding-left:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-choices::before{content:'\f0d7'}#bootstrap-theme .civihr-ui-select.ui-select-multiple:not(.open) .select2-input{cursor:pointer;padding:0 0 0 5px !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-choices::before{content:'\f002';padding-right:15px}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .ui-select-search{border:0 !important;margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-search-field{margin:0 !important}#bootstrap-theme .civihr-ui-select.ui-select-multiple.open .select2-chosen{min-height:25px !important;border:0 !important;line-height:25px}#bootstrap-theme .civihr-ui-select.ui-select-multiple .select2-drop-active{left:-1px;box-sizing:content-box !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid *, #bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid.form-control{border-color:#cf3458 !important}#bootstrap-theme .ng-submitted .civihr-ui-select.ng-invalid:not(.open) .select2-arrow{border-left:solid 1px #cf3458 !important}#bootstrap-theme .result-list__contact-item{clear:left}#bootstrap-theme .result-list__contact-item::before{content:'\f007';float:left;height:22px;margin-right:10px;font-family:'FontAwesome';font-style:normal;text-rendering:auto;-webkit-font-smoothing:antialiased}#bootstrap-theme .button-list{display:flex;justify-content:space-between}#bootstrap-theme .button-list__button{cursor:pointer}#bootstrap-theme .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}#bootstrap-theme #civihr-ui-select-contact{padding:10px !important;background:#f3f6f7 !important;border:solid 1px !important;margin:5px !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme #civihr-ui-select-contact .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-ui-select-contact .button-list{display:flex;justify-content:space-between}#bootstrap-theme #civihr-ui-select-contact .button-list__button{cursor:pointer}#bootstrap-theme #civihr-ui-select-contact .button-list__button:not(:last-of-type){padding-right:5px}#bootstrap-theme #civihr-ui-select-contact .button-list--with-upper-margin{border-top:solid 2px;padding-top:10px;margin-top:10px}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme #civihr-ui-select-contact .loading-indicator{text-align:center}#bootstrap-theme #civihr-ui-select-contact .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme #civihr-ui-select-contact, #bootstrap-theme #civihr-ui-select-contact *{border-color:#e8eef0 !important}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}#bootstrap-theme .loading-indicator{text-align:center}#bootstrap-theme .loading-indicator:before{content:'';animation:spin 1s infinite linear;background:url("../svgs/civicrm.svg") no-repeat center center !important;display:inline-block;height:36px;width:36px}#bootstrap-theme .refine-search__dropdown{box-shadow:none !important}#bootstrap-theme .refine-search__placeholder{color:#555;padding-bottom:10px}#bootstrap-theme #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000}#bootstrap-theme #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto}#bootstrap-theme #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal}#bootstrap-theme .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#bootstrap-theme .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em}#bootstrap-theme .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--default-color:after{color:#82BD58}#bootstrap-theme .chr_logo--default-color:before{color:#1B6F90}#bootstrap-theme .chr_logo--default-color.chr_logo--full>i:after{color:#026085}#bootstrap-theme .chr_logo--default-size{font-size:20px}#bootstrap-theme .chr_logo--full:after{left:0;position:absolute;top:0}#bootstrap-theme .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative}#bootstrap-theme .chr_profile-card{display:inline-block}#bootstrap-theme .chr_profile-card__name{display:table-cell;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture>img{background:#e8eef0;border-radius:50%;width:100%;vertical-align:middle}#bootstrap-theme .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px}#bootstrap-theme .chr_profile-card__picture--small>img{height:34px;width:34px}#bootstrap-theme .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#bootstrap-theme .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative}#bootstrap-theme .chr_user-menu:hover{background:#f3f6f7}#bootstrap-theme .chr_user-menu:hover>.chr_user-menu__dropdown{display:block}#bootstrap-theme .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){#bootstrap-theme .chr_user-menu__data>.chr_user-menu__arrow{display:none}}#bootstrap-theme .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99}#bootstrap-theme .chr_user-menu__dropdown ul{list-style-type:none;margin:0}#bootstrap-theme .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap}#bootstrap-theme .chr_user-menu__dropdown li>a, #bootstrap-theme .chr_user-menu__dropdown li>span{padding:0 30px 0 20px}#bootstrap-theme .chr_user-menu__dropdown a{color:#464354;display:block}#bootstrap-theme .chr_user-menu__dropdown a:hover{background:#f3f6f7;color:#464354;text-decoration:none}#bootstrap-theme .chr_user-menu__dropdown a>i{margin-right:10px}#bootstrap-theme .chr_user-menu__dropdown__username{color:#464354}#bootstrap-theme .chr_user-menu__dropdown__username:after{border-top:1px solid #d3dee2;content:'';display:block;height:0;margin:0 30px 0 20px}.page-civicrm-activity .crm-search-tasks, .page-civicrm-case .crm-search-tasks{margin:20px 0;padding:18px 15px;background-color:#fff;box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border-radius:0}.page-civicrm-activity .crm-search-tasks .form-layout-compressed, .page-civicrm-case .crm-search-tasks .form-layout-compressed{margin:0}.page-civicrm-activity .crm-search-tasks .select2-container, .page-civicrm-case .crm-search-tasks .select2-container{width:180px !important}.page-civicrm-activity #searchForm{box-sizing:border-box}.page-civicrm-activity #searchForm tr:not(#activityCustom) td{padding:10px 20px}.page-civicrm-activity #searchForm tr:nth-child(n+8):nth-child(-n+9){display:none}.page-civicrm-activity #searchForm tr td{border:0 !important;padding:0}.page-civicrm-activity #searchForm tr td.font-size12pt{font-size:13px}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh{float:right !important;margin:0}.page-civicrm-activity #searchForm tr td .crm-button_qf_Search_refresh>.crm-form-submit{margin-right:0 !important}.page-civicrm-activity #searchForm tr td .select2-choices, .page-civicrm-activity #searchForm tr td .select2-choice, .page-civicrm-activity #searchForm tr td #activity_subject{min-width:329px}.page-civicrm-activity #searchForm .crm-i{display:none}.page-civicrm-activity .ui-dialog .crm-submit-buttons{display:none}.page-civicrm-activity .ui-dialog table tr{border-bottom:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1{border-bottom:none;padding:0}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 td.label{display:table-cell}.page-civicrm-activity .ui-dialog #Activity_Custom_Fields__1 .crm-accordion-wrapper{margin-left:5px;margin-right:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-block{box-shadow:none}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup{padding:0;margin-bottom:0}.page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-custom_data #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-attachment #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-recurring_activity #Activity_Custom_Fields__, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup>td, .page-civicrm-activity .ui-dialog .CRM_Activity_Form_Activity .crm-activity-form-block-schedule_followup #Activity_Custom_Fields__{padding:0 20px}.page-civicrm-case .font-size12pt{font-size:13px}.page-civicrm-case .font-size12pt label{width:212px;display:inline-block}.page-civicrm-case .crm-case-search-form-block tr td.crm-submit-buttons{padding:12.5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td{padding:5px 20px}.page-civicrm-case .crm-case-search-form-block tr:nth-child(n+1):nth-child(-n+4)>td:first-child{width:220px;box-sizing:border-box}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td .crm-button_qf_Search_refresh{float:right !important}.page-civicrm-case .crm-case-search-form-block tr.crm-case-search-form-block-sort_name>td #_qf_Search_refresh-top{margin-right:0 !important}.page-civicrm-case .crm-case-search-form-block tr .crm-i{display:none}.page-civicrm-case .crm-case-search-form-block #Application{margin-left:-5px;margin-right:-5px}.page-civicrm-case .crm-case-search-form-block #Application .crm-accordion-body td{padding-left:0 !important}.page-civicrm-case .caseSelector>tbody>tr .dataTable tr>td:first-child, .page-civicrm-case .caseSelector>tbody>tr .dataTable tr>th:first-child{text-align:center}.page-civicrm-case .caseSelector>tbody>tr th a{color:#464354}.page-civicrm-case .caseSelector>tbody>tr .nestedActivitySelector td:nth-child(8){text-align:left !important}.page-civicrm-case .caseSelector>tbody>tr .paginate_button{line-height:normal}.page-civicrm-case .caseSelector>tbody>tr .ui-buttonset .ui-button{padding:5px 10px}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']{margin:8px 20px !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect input[type='button']:first-child{margin-right:0 !important}.page-civicrm-vacancy .crm-container .form-layout-compressed .advmultiselect tr:first-child td:nth-child(2){vertical-align:bottom;padding-bottom:4px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview{margin-left:20px}.page-civicrm-vacancy .crm-container .crm-block.crm-form-block .form-layout-compressed .crm-profile-selector-preview .crm-i{display:none}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block{padding-top:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>fieldset{margin:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed{margin-top:0}.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.select2-container, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-text, .page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-block>table.form-layout-compressed td>.crm-form-date-wrapper .crm-form-text:nth-child(2){min-width:200px}@media (max-width: 1200px) and (min-width: 768px){.page-civicrm-vacancy .CRM_HRRecruitment_Form_HRVacancy .crm-form-multiselect{min-width:160px;width:160px}}.page-civicrm-vacancy #addMorePermission{background:#0071bd;border-color:#0071bd;border-radius:3px;color:#fff;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;padding:8px 12px;text-shadow:none;text-transform:uppercase}.page-civicrm-vacancy #addMorePermission:hover{background:#58b7d1}.page-civicrm-vacancy #addMorePermission>.add-icon{background-image:none;text-indent:0;margin-right:3px}.page-civicrm-vacancy #addMorePermission>.add-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff;position:relative;top:-1px}.page-civicrm-vacancy table.vacancy-popup{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies .description{margin-bottom:20px}.page-civicrm-vacancy .view-hrvacancies td>a{color:#0071bd}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Search .crm-search-form-block{margin-bottom:20px}.page-civicrm-vacancy #searchForm{padding:20px}.page-civicrm-vacancy #searchForm td{padding:0}.page-civicrm-vacancy #searchForm tr:nth-child(2) td{padding:20px 0}.page-civicrm-vacancy #searchForm #_qf_Search_refresh{margin-bottom:0 !important}.page-civicrm-vacancy #searchForm .listing-box{border-color:#4d4d69}.page-civicrm-vacancy #searchForm .listing-box>div{background-color:transparent}.page-civicrm-vacancy #searchForm .listing-box>div label{color:#4d4d69;font-weight:normal !important;padding:5px}.page-civicrm-vacancy #searchForm .font-size12pt{font-size:12px}.page-civicrm-vacancy #searchForm .crm-form-text{width:312px}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content{padding:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog-content .crm-block{box-shadow:none}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr{border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog table tr td{padding-left:0;border-bottom:0}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2){vertical-align:top}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .advmultiselect tr:first-child td:nth-child(2) input[type='button']:first-child{margin-left:0 !important;width:71px;display:block}.page-civicrm-vacancy.page-civicrm-vacancy-dashboard .ui-dialog .ui-dialog-buttonpane{margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-vacancy-summary>div:not(.collapsed) .crm-accordion-header::before{content:""}.page-civicrm-vacancy .hr-pipeline-tab .crm-accordion-header h2{color:#464354 !important;display:inline-block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy{width:49%;margin-bottom:20px;border:1px solid #e8eef0;border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div{padding:0;font-weight:normal}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table{width:100%;background-color:#fff;border:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2) td{line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td{color:#586277;padding:0 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr td:not(:first-child){padding:10px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3{background-color:#4d4d69;padding:8px 15px}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a{color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon{background-image:none;text-indent:0;top:-3px;margin:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:after{font-family:'FontAwesome';font-style:normal;text-rendering:auto;font-size:13px;content:"";color:#fff}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table h3>a .edit-icon:hover:after{opacity:.8}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage{border-left:0 !important;width:auto;display:none}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage:first-child{display:block}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table .hr-stage a{font-weight:600;color:#0071bd;right:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:first-child td{padding:0}.page-civicrm-vacancy .hr-pipeline-tab .hr-vacancy>div>table tr:nth-child(2){font-weight:600}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity{border:1px solid transparent;overflow:hidden;border-radius:2px}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .hr-recent-activity-title{background-color:#4d4d69;padding:8px 15px;line-height:2em}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight{width:calc(100% + 1px)}.page-civicrm-vacancy .hr-pipeline-tab .hr-dashboard-recent-activity .row-highlight tr .hr-recent-activity-block{font-size:13px;color:#586277}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile{padding:20px}.page-civicrm-vacancy .CRM_HRRecruitment_Form_Application .crm-profile-name-application_profile legend{padding-top:20px}#bootstrap-theme .nav-pills-horizontal{margin-bottom:15px}#bootstrap-theme .panel-body-section{padding:15px 20px;padding-bottom:0;padding-top:0}#bootstrap-theme .panel-default-inverted>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-inverted>.panel-footer, #bootstrap-theme .panel-default-inverted>.panel-heading{background:#fafbfc}#bootstrap-theme .panel-default-plain>.panel-heading, #bootstrap-theme .panel-default-plain-inverted>.panel-heading{padding-bottom:0}#bootstrap-theme .panel-default-plain>.panel-heading>hr, #bootstrap-theme .panel-default-plain-inverted>.panel-heading>hr{margin:15px 20px;margin-bottom:0;margin-left:0;margin-right:0}#bootstrap-theme .panel-default-plain>.panel-body{background:#ffffff}#bootstrap-theme .panel-default-plain>.panel-footer{background:#fafbfc}#bootstrap-theme .panel-default-plain-inverted>.panel-heading{background:#fafbfc} #civihr-menu{background:#fff;box-shadow:0 3px 18px 0 rgba(70,67,84,0.25);position:fixed;top:0;width:100%;z-index:1000} #civihr-menu #civicrm-menu{box-shadow:none;float:left;position:static !important;width:auto} #civihr-menu .chr_user-menu{float:right}@font-face{font-family:'icomoon';src:url("../fonts/icomoon.ttf?tozcjz") format("truetype"),url("../fonts/icomoon.woff?tozcjz") format("woff"),url("../fonts/icomoon.svg?tozcjz#icomoon") format("svg");font-weight:normal;font-style:normal} .chr_logo{display:inline-block;font-family:'icomoon' !important;font-size:1em;font-style:normal;font-weight:normal;font-variant:normal;line-height:1;position:relative;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .chr_logo:after{color:inherit;content:"\e900";margin-left:0.45em} .chr_logo:before{color:inherit;content:"\e901";left:0;position:absolute;top:0} .chr_logo--default-color:after{color:#82BD58} .chr_logo--default-color:before{color:#1B6F90} .chr_logo--default-color.chr_logo--full>i:after{color:#026085} .chr_logo--default-size{font-size:20px} .chr_logo--full:after{left:0;position:absolute;top:0} .chr_logo--full>i:after{bottom:.2em;color:inherit;content:"\e902";font-size:.7em;font-style:normal;margin-left:2.4em;position:relative} .chr_profile-card{display:inline-block} .chr_profile-card__name{display:table-cell;vertical-align:middle} .chr_profile-card__picture{display:table-cell;overflow:hidden;vertical-align:middle} .chr_profile-card__picture>img{background:#e8eef0;border-radius:50%;width:100%;vertical-align:middle} .chr_profile-card__picture+.chr_profile-card__name{padding-left:15px} .chr_profile-card__picture--small>img{height:34px;width:34px} .spinner{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px;margin:auto;width:32px}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} .chr_user-menu{color:#464354;cursor:default;line-height:60px;padding:0 10px;position:relative} .chr_user-menu:hover{background:#f3f6f7} .chr_user-menu:hover>.chr_user-menu__dropdown{display:block} .chr_user-menu__data>.chr_profile-card{margin:-2px 8px 0 8px;vertical-align:top}@media (max-width: 1250px){ .chr_user-menu__data>.chr_user-menu__arrow{display:none}} .chr_user-menu__dropdown{background:#fff;display:none;position:absolute;right:0;z-index:99} .chr_user-menu__dropdown ul{list-style-type:none;margin:0} .chr_user-menu__dropdown li{line-height:50px;white-space:nowrap} .chr_user-menu__dropdown li>a, .chr_user-menu__dropdown li>span{padding:0 30px 0 20px} .chr_user-menu__dropdown a{color:#464354;display:block} .chr_user-menu__dropdown a:hover{background:#f3f6f7;color:#464354;text-decoration:none} .chr_user-menu__dropdown a>i{margin-right:10px} .chr_user-menu__dropdown__username{color:#464354} .chr_user-menu__dropdown__username:after{border-top:1px solid #d3dee2;content:'';display:block;height:0;margin:0 30px 0 20px} #civicrm-menu li.menumain.crm-Self_Service_Portal>a{border:1px solid #4d4d69;border-radius:2px;font-weight:600;height:35px;line-height:35px;padding:0 15px;margin-top:12px;text-transform:uppercase} #civicrm-menu li.menumain.crm-Self_Service_Portal>a:hover{background:#3e3e54;color:#fff} .crm-link-home .chr_logo{font-size:17px;margin-right:5px;vertical-align:sub} .crm-container .dataTables_processing, .crm-container .blockUI.blockOverlay{animation:spin 1.5s linear infinite;background:url(../img/spinner.svg) no-repeat center center !important;display:block;height:32px !important;margin:auto;width:32px !important;margin:8% 50% !important;opacity:1 !important}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}} diff --git a/org.civicrm.bootstrapcivihr/scss/components/_help-text.scss b/org.civicrm.bootstrapcivihr/scss/components/_help-text.scss new file mode 100644 index 00000000000..89e264d0e61 --- /dev/null +++ b/org.civicrm.bootstrapcivihr/scss/components/_help-text.scss @@ -0,0 +1,4 @@ +.help-text-link { + display: inline-block; + padding-left: 5px; +} diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index 1bc48d0f68f..6baf95503e1 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -115,7 +115,7 @@ e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1 return e+vi(Ei()*(t-e+1))}function _t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Mt(e,t,n){var r=-1,i=e.length;for(t=null==t?0:+t||0,0>t&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(t,n){function r(){var t,r=[{item:e.element(n[0].body),styles:[{name:"overflow",old:null,new:"hidden"},{name:"height",old:null,new:"100%"},{name:"width",old:null,new:"100%"}]},{item:e.element(n[0].getElementsByTagName("html")[0]),styles:[{name:"overflow",old:null,new:"hidden"},{name:"height",old:null,new:"100%"},{name:"width",old:null,new:"100%"}]}];return r.forEach(function(e){e.styles.forEach(function(t){t.old=e.item.css(t.name),e.item.css(t.name,t.new)})}),t=i.apply(this,arguments),t.closed.then(function(){r.forEach(function(e){e.styles.forEach(function(t){e.item.css(t.name,t.old)})})}),t}var i=t.open;return t.open=r,t}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1, -startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1 +;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r,i){var o=i[0];o.multiple&&n.click(function(e){0===angular.element(e.target).parents(".ui-select-match").length&&0===angular.element(e.target).parents(".ui-select-choices").length&&(n.find(".ui-select-search").focus(),o.open=!0,t.$apply())}),e.apply(this,arguments)}},e}]}),define("common/decorators/uib-datepicker-calendar-icon.decorator",["common/services/detect-device.service"],function(){"use strict";return["$delegate","detectDevice",function(e,t){function n(e,t){var n=angular.element('');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(t,n){function r(){var t,r=[{item:e.element(n[0].body),styles:[{name:"overflow",old:null,new:"hidden"},{name:"height",old:null,new:"100%"},{name:"width",old:null,new:"100%"}]},{item:e.element(n[0].getElementsByTagName("html")[0]),styles:[{name:"overflow",old:null,new:"hidden"},{name:"height",old:null,new:"100%"},{name:"width",old:null,new:"100%"}]}];return r.forEach(function(e){e.styles.forEach(function(t){t.old=e.item.css(t.name),e.item.css(t.name,t.new)})}),t=i.apply(this,arguments),t.closed.then(function(){r.forEach(function(e){e.styles.forEach(function(t){e.item.css(t.name,t.old)})})}),t}var i=t.open;return t.open=r,t}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n \n \n\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({ +formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1 ;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function o(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{extend:function(t){return e.assign(Object.create(this),t)},compactFilters:function(t){return t?e.pick(t,function(e){return 0===e||!1===e||!!e}):null},processFilters:function(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=i(t):t.in||t.nin?e[n]=o(t):e[n]=t},{})):null}}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/org.civicrm.reqangular/src/common/modules/templates.js b/org.civicrm.reqangular/src/common/modules/templates.js index ee70f7cbc76..f21582dec0d 100644 --- a/org.civicrm.reqangular/src/common/modules/templates.js +++ b/org.civicrm.reqangular/src/common/modules/templates.js @@ -1,8 +1,9 @@ define(['common/angular'], function(angular) { 'use strict'; return angular.module('common.templates', []).run(['$templateCache', function($templateCache) {$templateCache.put('dialog.html','\n\n\n'); -$templateCache.put('help-text.html','\n'); +$templateCache.put('help-text.html','\n \n \n\n'); $templateCache.put('loading.html','
    \n
    \n
    \n
    \n'); $templateCache.put('time-amount-picker.html','
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'); $templateCache.put('timepicker-select.html','\n\n'); +$templateCache.put('components/heatmap.html','
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'); $templateCache.put('civihr-ui-select/choices.tpl.html','
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'); $templateCache.put('civihr-ui-select/match-multiple.tpl.html','\n
  • \n \n \n
  • \n
    \n'); $templateCache.put('civihr-ui-select/match.tpl.html','\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'); @@ -10,6 +11,5 @@ $templateCache.put('civihr-ui-select/select-contacts-multiple.tpl.html','
    \n
    \n \n
    \n'); $templateCache.put('civihr-ui-select/select-multiple.tpl.html','
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'); $templateCache.put('civihr-ui-select/select.tpl.html','
    \n
    \n \n
    \n'); -$templateCache.put('components/heatmap.html','
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'); $templateCache.put('contact-actions/contact-actions.html','
    \n \n \n
    \n'); $templateCache.put('contact-actions/modals/form.html','
    \n \n \n \n
    \n');}]);}); \ No newline at end of file diff --git a/org.civicrm.reqangular/src/common/templates/help-text.html b/org.civicrm.reqangular/src/common/templates/help-text.html index 530bbb747b0..c014d7c1fbf 100644 --- a/org.civicrm.reqangular/src/common/templates/help-text.html +++ b/org.civicrm.reqangular/src/common/templates/help-text.html @@ -1,4 +1,4 @@ - + diff --git a/org.civicrm.reqangular/test/directives/help-text.directive.spec.js b/org.civicrm.reqangular/test/directives/help-text.directive.spec.js index ce08a96dc56..32efa271711 100644 --- a/org.civicrm.reqangular/test/directives/help-text.directive.spec.js +++ b/org.civicrm.reqangular/test/directives/help-text.directive.spec.js @@ -27,7 +27,7 @@ define([ helpText = element.find('.help-text').html(); helpTitle = element.attr('title'); - element.find('button').click(); + element.find('a').click(); }); it('displays the help text when the button is clicked', function () { @@ -45,7 +45,7 @@ define([ helpText = element.find('.help-text').html(); - element.find('button').click(); + element.find('a').click(); }); it('displays the help text when the button is clicked', function () { From 7ffc1d6ca94708ac68ab1ab5431bde9d64e5580c Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Tue, 29 May 2018 14:52:40 +0100 Subject: [PATCH 173/251] PCHR-3726: Add tests. --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index c9e9ea21823..fb1a901203d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -3777,6 +3777,121 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog $this->assertNotEmpty($result['values'][1]['balance_change']); } + public function testGetAndGetFullShouldNotReturnToilRequestsForContactsOtherThanLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($contact1['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + //The logged in contact would be not be able to view the other contact's TOIL request + //He can only view his own TOIL request + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(1, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(1, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + } + + public function testGetAndGetFullShouldNotReturnToilRequestsForNonManageesWhenLoggedInUserIsALeaveApprover() { + $manager = ContactFabricator::fabricate(); + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($manager['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + $this->setContactAsLeaveApproverOf($manager, $contact2); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + //Results will be not be returned for contact1 since contact one is not a managee of the leave + //approver + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(1, $result['count']); + $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(1, $result['count']); + $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); + } + public function testGetAndGetFullReturnsAllDataWhenLoggedInUserHasViewAllContactsPermission() { $adminID = 1; $contact1 = ContactFabricator::fabricate(); From 4c561dc8e5a402b4109471fb435ae97bb097aaea Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Fri, 25 May 2018 17:48:59 +0100 Subject: [PATCH 174/251] PCHR-3657: Make legend badges selectable --- .../css/leaveandabsence.css | 2 +- .../js/angular/dist/absence-tab.min.js | 8 +- .../js/angular/dist/admin-dashboard.min.js | 8 +- .../js/angular/dist/manager-leave.min.js | 10 +-- .../js/angular/dist/my-leave.min.js | 10 +-- .../leave-calendar-legend.component.js | 64 +++++++++++++++- .../components/leave-calendar.component.js | 3 +- .../leave-calendar-legend.component.spec.js | 75 ++++++++++++++++++- .../scss/components/_leave-calendar.scss | 4 + .../components/leave-calendar-legend.html | 8 +- 10 files changed, 167 insertions(+), 25 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css index cfd57580160..3fbb05c3112 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css @@ -1 +1 @@ -#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} +#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index c8772672cc1..33dc38dbf96 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function n(e){function n(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var t=this;t.legendCollapsed=!0,t.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday", -cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],t.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],t.getAbsenceTypeStyle=n}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",n]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return Y[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(n){var t=Object.keys(G[n.id]||{}).length,a=e.includes(V.showTheseContacts,n.id);return t||a}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(G[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);G[e.contact_id]=G[e.contact_id]||{},n.forEach(function(n){G[e.contact_id][n.date]||(G[e.contact_id][n.date]=[]),G[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonth",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.month&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return V.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){W=!0,V.month.loading=!1})}function O(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function L(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){Y=e.indexBy(n,"contact_id")})}function S(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(G,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);G[n.contact_id]=G[n.contact_id]||{},t.forEach(function(t){e.remove(G[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return G[t]&&G[t][n.date]?G[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){V.currentPage=0,V.visible=!0,(n||!W)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],Y={},G={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.month).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){ -t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){ -o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){return!c.length||e.includes(c,n)}function o(e){return{backgroundColor:e.color,borderColor:e.color}}function s(){t.$new().$watch(function(){return c},function(e,n){ +e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c)},!0)}function i(){c=[]}function r(n){e.includes(c,n)?e.remove(c,function(e){return n===e}):c.push(n)}n.debug("Component: leave-calendar-legend");var c=[],u=this;u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=o,u.resetFilteringByAbsenceTypes=i,u.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return Y[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(n){var t=Object.keys(G[n.id]||{}).length,a=e.includes(V.showTheseContacts,n.id);return t||a}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(G[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);G[e.contact_id]=G[e.contact_id]||{},n.forEach(function(n){G[e.contact_id][n.date]||(G[e.contact_id][n.date]=[]),G[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonth",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.month&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return V.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){W=!0,V.month.loading=!1})}function O(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function L(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){Y=e.indexBy(n,"contact_id")})}function S(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(G,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);G[n.contact_id]=G[n.contact_id]||{},t.forEach(function(t){e.remove(G[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return G[t]&&G[t][n.date]?G[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){V.currentPage=0,V.visible=!0,(n||!W)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],Y={},G={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.month).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={ +approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"] +}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index ceec1e2f839..1b3ed493538 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}), -define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(), -u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){ -if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.length||e.includes(u,t)}function r(e){return{backgroundColor:e.color,borderColor:e.color}}function o(){n.$new().$watch(function(){return u},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u)},!0)}function s(){u=[]}function i(t){e.includes(u,t)?e.remove(u,function(e){return t===e}):u.push(t)}t.debug("Component: leave-calendar-legend");var u=[],c=this;c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=r,c.resetFilteringByAbsenceTypes=s,c.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm", +msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1", +_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U, +Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index b0ba1c9fb69..0d1dff72018 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=M[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function M(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),S())})}function h(e){N.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),O(),M(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&M).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){L(t())}function I(){L(N.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){x("previous"),x("next")}function L(t){t&&(N.selectedMonthIndex=m(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=T,N.paginateMonth=D,N.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),N.showFilters?$():e.noop])}).then(function(){h(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(M(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r -}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),M()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:M(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function M(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function L(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=L(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function N(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function F(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=F,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),N()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a), -a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function M(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){M(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function O(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Le.errors=[]}function M(){return Le.request.create().then($e).then(function(){me("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?m.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Me.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Le.selectedContactId?m.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?m.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=fe(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,O(),w(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?we():M()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?me("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Me=[],Le=n.assign(this,f);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=x,Le.deleteLeaveRequest=E,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=Ae,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId), -Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.length||e.includes(u,t)}function r(e){return{backgroundColor:e.color,borderColor:e.color}}function o(){n.$new().$watch(function(){return u},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u)},!0)}function s(){u=[]}function i(t){e.includes(u,t)?e.remove(u,function(e){return t===e}):u.push(t)}t.debug("Component: leave-calendar-legend");var u=[],c=this;c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=r,c.resetFilteringByAbsenceTypes=s,c.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){ +function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){ +return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E, +Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 9f0e3349b7a..6df0e4fdb1f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,N(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return F(e)&&e.then&&e.$$promises}if(!F(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!F(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(f.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),m=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(m++,g[e].then(function(t){b[e]=t,--m||l()},c))}),m||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return f}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(m,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},F(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",m=0,f=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),q.length>0)for(m=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!N(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!F(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=F(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||N(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],N(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):N(t.parent)?t.parent:F(t.parent)&&N(t.parent.name)?t.parent.name:"";if(r&&!P[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===T?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),N(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=T(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function x(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=x(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=x(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!N(e))throw new Error("state should be a string");return F(n)?e+Y(n):(n=t.$eval(n),F(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,N=t.isString,F=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),E(),S())})}function h(e){N.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){N.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(x)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){N.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return N.injectMonth&&(e=k("destroyed"),N.injectMonth=!1),e}function P(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),x(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){L(t())}function I(){L(N.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){O("previous"),O("next")}function L(t){t&&(N.selectedMonthIndex=f(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function M(){return N.roleOverride?a.resolve().then(function(){B=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=T,N.paginateMonth=D,N.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([b(),q(),w(),N.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["leave-absences/shared/modules/components"],function(e){function t(e){function t(e){return{backgroundColor:e.color,borderColor:e.color}}e.debug("Component: leave-calendar-legend");var n=this;n.legendCollapsed=!0,n.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],n.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],n.getAbsenceTypeStyle=t}e.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:["$log",t]})}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:N(n),isAccruedTOIL:w(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",F)),W.push(i.subscribe("LeaveRequest::updatedByManager",F)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):F(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),x()]).then(O).then(k).then(function(){H=!0,G.month.loading=!1})}function x(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function O(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function F(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=f,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){F(e),"from"===e&&N(),x("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,F("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function N(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,F("to"))}function F(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,F("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=x,te.isLeaveType=I,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){N(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function $(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function P(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){ -Y.sections.entitlements.data=e})}function T(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function x(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){N(e)})}function N(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&F(t,a))})}function F(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:N,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),$(),q()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=F.from_date!==u.request.from_date||F.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function T(){u.isMode("view")||(C(),w(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){F=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function N(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var F,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=A,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=N,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,q,$,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function P(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function x(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function I(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==F())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then($e).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=F();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return N(Le.getStatusFromValue(Le.request.status_id).name)}function N(e){return n.map(Te[e],function(e){return Le.requestStatuses[e]})}function F(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():N("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=F(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=q.init(t):"toil"===e&&(Le.request=$.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:xe}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Pe.types,e),!Le.absenceTypes.length)return r.reject(Ie)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,x(),A(),Le.request.isValid().then(ee()&&I).then(L).then(!Le.request.change_balance&&pe).then(qe).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then($e).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],xe="",Ie="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId}, -format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,g={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,$);W(this,{id:e,type:a,location:o,array:b,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){O("previous"),O("next")}function L(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([b(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.length||e.includes(u,t)}function r(e){return{backgroundColor:e.color,borderColor:e.color}}function o(){n.$new().$watch(function(){return u},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u)},!0)}function s(){u=[]}function i(t){e.includes(u,t)?e.remove(u,function(e){return t===e}):u.push(t)}t.debug("Component: leave-calendar-legend");var u=[],c=this;c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=r,c.resetFilteringByAbsenceTypes=s,c.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){H=!0,G.month.loading=!1})}function I(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return $(e.list)})}function x(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function O(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=f,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),q(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function b(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function g(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&g()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]} +}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,$,q,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function I(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==N())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Le.getStatusFromValue(Le.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function N(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():F("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=N(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=$.init(t):"toil"===e&&(Le.request=q.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Te.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,I(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then($e).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function $e(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then(qe).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){ +return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 0db9e5f907f..56978ae4db1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -1,8 +1,9 @@ /* eslint-env amd */ define([ + 'common/lodash', 'leave-absences/shared/modules/components' -], function (components) { +], function (_, components) { components.component('leaveCalendarLegend', { bindings: { absenceTypes: '<' @@ -11,12 +12,15 @@ define([ return sharedSettings.sharedPathTpl + 'components/leave-calendar-legend.html'; }], controllerAs: 'legend', - controller: ['$log', controller] + controller: leaveCalendarLegendController }); - function controller ($log) { + leaveCalendarLegendController.$inject = ['$log', '$rootScope']; + + function leaveCalendarLegendController ($log, $rootScope) { $log.debug('Component: leave-calendar-legend'); + var absenceTypesToFilterBy = []; var vm = this; vm.legendCollapsed = true; @@ -33,7 +37,25 @@ define([ { label: 'AT', description: 'Accrued TOIL' } ]; + vm.checkIfAbsenceTypeIsSelectedForFiltering = checkIfAbsenceTypeIsSelectedForFiltering; vm.getAbsenceTypeStyle = getAbsenceTypeStyle; + vm.resetFilteringByAbsenceTypes = resetFilteringByAbsenceTypes; + vm.toggleFilteringByAbsenceType = toggleFilteringByAbsenceType; + + (function init () { + initWatchers(); + }()); + + /** + * Checks if absence type is selected for filtering + * + * @param {String} absenceTypeId + * @return {Boolean} + */ + function checkIfAbsenceTypeIsSelectedForFiltering (absenceTypeId) { + return !absenceTypesToFilterBy.length || + _.includes(absenceTypesToFilterBy, absenceTypeId); + } /** * Uses the absence type color to return border and background color styles @@ -47,5 +69,41 @@ define([ borderColor: absenceType.color }; } + + /** + * Watches the state of the absence types filter + */ + function initWatchers () { + $rootScope.$new().$watch(function () { + return absenceTypesToFilterBy; + }, function (newValue, oldValue) { + if (newValue !== oldValue) { + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', + absenceTypesToFilterBy); + } + }, true); + } + + /** + * Resets filtering by absence types + */ + function resetFilteringByAbsenceTypes () { + absenceTypesToFilterBy = []; + } + + /** + * Toggles filtering by a given absence type + * + * @param {String} absenceTypeId + */ + function toggleFilteringByAbsenceType (absenceTypeId) { + if (!_.includes(absenceTypesToFilterBy, absenceTypeId)) { + absenceTypesToFilterBy.push(absenceTypeId); + } else { + _.remove(absenceTypesToFilterBy, function (_absenceTypeId_) { + return absenceTypeId === _absenceTypeId_; + }); + } + } } }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index 120b27c7ca7..b4953e44c28 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -50,7 +50,8 @@ define([ level_type: null, location: null, region: null - } + }, + absenceTypes: {} }; vm.monthPaginatorsAvailability = { previous: true, diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index a5b5f44c554..9ba5c036da8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -8,12 +8,13 @@ define([ 'use strict'; describe('leaveCalendarLegend', function () { - var $componentController, $log, controller, mockedAbsenceTypes; + var $componentController, $log, $rootScope, controller, mockedAbsenceTypes; beforeEach(module('leave-absences.templates', 'leave-absences.components')); beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_) { $componentController = _$componentController_; $log = _$log_; + $rootScope = _$rootScope_; mockedAbsenceTypes = AbsenceTypeData.all().values; @@ -67,6 +68,78 @@ define([ }); }); + describe('absence types filter selection storage', function () { + beforeEach(function () { + spyOn($rootScope, '$emit'); + $rootScope.$digest(); + }); + + it('has all absence types selelected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(true); + }); + + describe('when an absence type is selected', function () { + beforeEach(function () { + controller.toggleFilteringByAbsenceType('1'); + $rootScope.$digest(); + }); + + it('has the absence type selected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + }); + + it('has other absence type not selected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(false); + }); + + it('notifies parent controller', function () { + expect($rootScope.$emit).toHaveBeenCalledWith( + 'LeaveCalendar::updateFiltersByAbsenceType', ['1']); + }); + + describe('when the same absence type is deselected', function () { + beforeEach(function () { + controller.toggleFilteringByAbsenceType('1'); + }); + + it('selects all absence types back', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(true); + }); + }); + + describe('when another absence type is selected', function () { + beforeEach(function () { + controller.toggleFilteringByAbsenceType('2'); + }); + + it('contains multiple absence types', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + }); + + it('leave other absence types not selected', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(false); + }); + + describe('when absence types filter is reset', function () { + beforeEach(function () { + controller.resetFilteringByAbsenceTypes(); + }); + + it('selects all absence types back', function () { + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('1')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('2')).toEqual(true); + expect(controller.checkIfAbsenceTypeIsSelectedForFiltering('3')).toEqual(true); + }); + }); + }); + }); + }); + function compileComponent () { controller = $componentController('leaveCalendarLegend', null, { absenceTypes: mockedAbsenceTypes }); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index 80b0eecd77d..ee49afb61d3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -201,6 +201,10 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; &.chr_leave-calendar__legend__type-badge-public-holiday { background-color: $chr-leave-calendar-item-public-holiday-background-color; } + + &.chr_leave-calendar__legend__type-badge-not-selected { + opacity: 0.4; + } } .chr_leave-calendar__legend__other-badge { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index 222e2b9845b..2a9ecb00e8f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -10,12 +10,18 @@

    Types
    + {{legend.absenceTypesToFilterBy}}
    {{absenceType.title}}
    +
    +
    From c1055cf5d6c4ba6b0aeddc37247eafee5b29d788 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 29 May 2018 13:24:20 +0100 Subject: [PATCH 175/251] PCHR-3657: Fetch leave requests depending on the filter --- .../leave-calendar-month.component.js | 18 +++++++++++++++--- .../leave-calendar-month.component.spec.js | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index 422563e028b..5260378a47b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -30,6 +30,7 @@ define([ sharedSettings) { $log.debug('Component: leave-calendar-month'); + var absenceTypesToFilterBy = []; var dataLoaded = false; var eventListeners = []; var calendars = {}; @@ -286,6 +287,11 @@ define([ updateLeaveRequest(statusUpdate.leaveRequest); } })); + $rootScope.$on('LeaveCalendar::updateFiltersByAbsenceType', function (event, _absenceTypesToFilterBy_) { + absenceTypesToFilterBy = _absenceTypesToFilterBy_; + + showMonth(event, true); + }); } /** @@ -429,15 +435,21 @@ define([ * @return {Promise} */ function loadMonthLeaveRequests () { - return LeaveRequest.all({ + var params = { from_date: { to: vm.month.days[vm.month.days.length - 1].date + ' 23:59:59' }, to_date: { from: vm.month.days[0].date + ' 00:00:00' }, status_id: { 'IN': leaveStatusesToBeDisplayed() }, contact_id: { 'IN': vm.contacts.map(function (contact) { return contact.id; })}, - type_id: { IN: _.pluck(vm.supportData.absenceTypes, 'id') } - }, null, null, null, false) + type_id: { 'IN': absenceTypesToFilterBy.length + ? absenceTypesToFilterBy + : _.pluck(vm.supportData.absenceTypes, 'id') } + }; + + leaveRequests = {}; + + return LeaveRequest.all(params, null, null, null, false) .then(function (leaveRequestsData) { return indexLeaveRequests(leaveRequestsData.list); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index 6ea7b035c4f..803702cb983 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -252,6 +252,21 @@ expect(LeaveRequest.all).toHaveBeenCalled(); }); }); + + describe('filter by absence types', function () { + var filterValue = ['777', '888']; + + beforeEach(function () { + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', filterValue); + $rootScope.$digest(); + }); + + it('loads leave requests for only selected absence types', function () { + expect(LeaveRequest.all).toHaveBeenCalledWith(jasmine.objectContaining({ + type_id: { 'IN': filterValue } + }), null, null, null, false); + }); + }); }); }); From 05cc42e83f77dd3c57959a74250cfc28330d230b Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 29 May 2018 15:29:17 +0100 Subject: [PATCH 176/251] PCHR-3657: Add reset button and styles, fix test --- .../css/leaveandabsence.css | 2 +- .../js/angular/dist/absence-tab.min.js | 8 +++---- .../js/angular/dist/admin-dashboard.min.js | 10 ++++---- .../js/angular/dist/manager-leave.min.js | 10 ++++---- .../js/angular/dist/my-leave.min.js | 10 ++++---- .../leave-calendar-legend.component.js | 23 +++++++++---------- .../leave-calendar-month.component.js | 4 ++-- .../leave-calendar-legend.component.spec.js | 5 +--- .../leave-calendar-month.component.spec.js | 2 +- .../scss/components/_leave-calendar.scss | 20 ++++++++++++++-- .../components/leave-calendar-legend.html | 15 +++++++++--- 11 files changed, 65 insertions(+), 44 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css index 3fbb05c3112..b7e9e105199 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css @@ -1 +1 @@ -#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} +#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-selected{border:solid 1px #fff;border-radius:4px;box-shadow:0 0 1px 0 #c7cbd0;height:26px;margin-bottom:-1px;margin-left:-2px;margin-right:9px;margin-top:9px;padding-left:9px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__reset-absence-types-filter{color:#464354}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 33dc38dbf96..f61e29733bf 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){return!c.length||e.includes(c,n)}function o(e){return{backgroundColor:e.color,borderColor:e.color}}function s(){t.$new().$watch(function(){return c},function(e,n){ -e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c)},!0)}function i(){c=[]}function r(n){e.includes(c,n)?e.remove(c,function(e){return n===e}):c.push(n)}n.debug("Component: leave-calendar-legend");var c=[],u=this;u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=o,u.resetFilteringByAbsenceTypes=i,u.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(V.period.start_date)&&o.isSameOrBefore(V.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return Y[e]}function f(){return V.showOnlyWithLeaveRequests?V.contacts.filter(function(n){var t=Object.keys(G[n.id]||{}).length,a=e.includes(V.showTheseContacts,n.id);return t||a}):V.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(G[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){V.supportData.dayTypes=e.indexBy(V.supportData.dayTypes,"name"),V.supportData.leaveRequestStatuses=e.indexBy(V.supportData.leaveRequestStatuses,"value"),V.supportData.publicHolidays=e.transform(V.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);G[e.contact_id]=G[e.contact_id]||{},n.forEach(function(n){G[e.contact_id][n.date]||(G[e.contact_id][n.date]=[]),G[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){H.push(o.$on("LeaveCalendar::showMonth",B)),H.push(r.subscribe("LeaveRequest::new",u)),H.push(r.subscribe("LeaveRequest::edit",N)),H.push(r.subscribe("LeaveRequest::updatedByManager",N)),H.push(r.subscribe("LeaveRequest::delete",h)),H.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function T(e,t,a){var o=V.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!V.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=V.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===V.month.month&&o.year()===V.month.year&&a.push(e.find(V.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(V.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return V.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){W=!0,V.month.loading=!1})}function O(){return i.all({from_date:{to:V.month.days[V.month.days.length-1].date+" 23:59:59"},to_date:{from:V.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:V.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(V.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function L(){var n=V.month.days[0].date,t=V.month.days[V.month.days.length-1].date;return s.get(V.contacts.map(function(e){return e.id}),n,t).then(function(n){Y=e.indexBy(n,"contact_id")})}function S(){return V.contactIdsToReduceTo&&(V.contacts=V.contacts.filter(function(n){return e.includes(V.contactIdsToReduceTo,n.contact_id)||e.find(G,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);G[n.contact_id]=G[n.contact_id]||{},t.forEach(function(t){e.remove(G[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),H.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return G[t]&&G[t][n.date]?G[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(V.month.days.map(function(e){return a.all(V.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){V.currentPage=0,V.visible=!0,(n||!W)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(V.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=!1,H=[],Y={},G={},V=this;V.currentPage=0,V.pageSize=20,V.visible=!1,V.showContactName=!!V.showContactName,V.showOnlyWithLeaveRequests=!!V.showOnlyWithLeaveRequests,V.$onDestroy=x,V.contactsList=f,V.getContactUrl=g,function(){var e=n().month(V.month.month).year(V.month.year);y(),C(),V.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={ -approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"] -}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(L)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),L(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&O).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){x(n())}function O(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){return!c.absenceTypesToFilterBy.length||e.includes(c.absenceTypesToFilterBy,n)}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy +},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([O(),L()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function L(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function O(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),L("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,L("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function L(e){return ne.selectedAbsenceType.calculation_unit_name===e}function O(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(O("sickness")||L("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(L("hours")||O("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=L,ne.isLeaveType=O,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function L(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function O(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this +;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),L(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(L)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function L(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function O(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=O,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&O(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function L(e){c.uiOptions.times[e].time=""}function O(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?O():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=L,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function L(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function O(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Oe)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Le}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Le=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Le})}):f.find(Le).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Oe)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,L(),P(),xe.request.isValid().then(ee()&&O).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Le="",Oe="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){ +o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 1b3ed493538..b1c2326d605 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.length||e.includes(u,t)}function r(e){return{backgroundColor:e.color,borderColor:e.color}}function o(){n.$new().$watch(function(){return u},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u)},!0)}function s(){u=[]}function i(t){e.includes(u,t)?e.remove(u,function(e){return t===e}):u.push(t)}t.debug("Component: leave-calendar-legend");var u=[],c=this;c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=r,c.resetFilteringByAbsenceTypes=s,c.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm", -msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1", -_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U, -Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.absenceTypesToFilterBy.length||e.includes(u.absenceTypesToFilterBy,t)}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation", +btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ +u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={}, +Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 0d1dff72018..f1add86565f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(P.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!P[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return P[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=P;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=P;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===T?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=T(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function P(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=T(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function T(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){P.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){P.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){P.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){P.loggedInContactId=e.contactId})}function b(){return P.loading.report=!0,i.all(w,P.pagination,void 0,void 0,!1).then(function(e){P.report=y(e.list),P.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){P.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){P.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,P.pagination.page=1,A(),P.loadReportCurrentPage()}function A(){P.selectedAbsenceTypes=P.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},P=this;P.absencePeriods=[],P.absenceTypes=[],P.loading={component:!0,report:!0},P.loggedInContactId=null,P.lookupContacts=[],P.pagination={page:1,size:50},P.report=[],P.reportCount=0,P.userRole=null,P.loadReportCurrentPage=b,function(){_(),v().then(function(){P.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function P(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function T(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=T,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.length||e.includes(u,t)}function r(e){return{backgroundColor:e.color,borderColor:e.color}}function o(){n.$new().$watch(function(){return u},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u)},!0)}function s(){u=[]}function i(t){e.includes(u,t)?e.remove(u,function(e){return t===e}):u.push(t)}t.debug("Component: leave-calendar-legend");var u=[],c=this;c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=r,c.resetFilteringByAbsenceTypes=s,c.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return V[e]}function m(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:P(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=T(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function P(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function T(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){H=!0,G.month.loading=!1})}function O(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return q(e.list)})}function I(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function x(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=T(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(T(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=M,G.contactsList=m,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),$(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){ -function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function P(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function T(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&T).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(P).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?T.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(T.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){T=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function P(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var T=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?T(e):n.all([T("table"),T("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function P(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function T(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),P(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(P)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return P(e).then(function(){S(e,!0)})})}function P(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function T(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),P("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){ -return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?P("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=T,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function T(){u.isMode("view")||(C(),A(),P())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=T,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function P(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function T(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=T();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Te[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Te.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Te.awaiting_approval=e,Te.more_information_required=e,Te.rejected=e,Te.approved=e,Te.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){P(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Pe.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Pe,Te={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E, -Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.absenceTypesToFilterBy.length||e.includes(u.absenceTypesToFilterBy,t)}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), +define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ +var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1, +Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 6df0e4fdb1f..d76d1b327cf 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,f),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),f.$$values=b,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(b))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,g=f.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(b,m(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),f.push(g.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,g={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,$);W(this,{id:e,type:a,location:o,array:b,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");b.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";L(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){O("previous"),O("next")}function L(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([b(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.length||e.includes(u,t)}function r(e){return{backgroundColor:e.color,borderColor:e.color}}function o(){n.$new().$watch(function(){return u},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u)},!0)}function s(){u=[]}function i(t){e.includes(u,t)?e.remove(u,function(e){return t===e}):u.push(t)}t.debug("Component: leave-calendar-legend");var u=[],c=this;c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=r,c.resetFilteringByAbsenceTypes=s,c.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(G.period.start_date)&&r.isSameOrBefore(G.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return V[e]}function f(){return G.showOnlyWithLeaveRequests?G.contacts.filter(function(t){var n=Object.keys(Y[t.id]||{}).length,a=e.includes(G.showTheseContacts,t.id);return n||a}):G.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(Y[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){G.supportData.dayTypes=e.indexBy(G.supportData.dayTypes,"name"),G.supportData.leaveRequestStatuses=e.indexBy(G.supportData.leaveRequestStatuses,"value"),G.supportData.publicHolidays=e.transform(G.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);Y[e.contact_id]=Y[e.contact_id]||{},t.forEach(function(t){Y[e.contact_id][t.date]||(Y[e.contact_id][t.date]=[]),Y[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){W.push(r.$on("LeaveCalendar::showMonth",j)),W.push(i.subscribe("LeaveRequest::new",c)),W.push(i.subscribe("LeaveRequest::edit",N)),W.push(i.subscribe("LeaveRequest::updatedByManager",N)),W.push(i.subscribe("LeaveRequest::delete",h)),W.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)}))}function C(e,n,a){var r=G.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!G.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=G.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===G.month.month&&r.year()===G.month.year&&a.push(e.find(G.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(G.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return G.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){H=!0,G.month.loading=!1})}function I(){return s.all({from_date:{to:G.month.days[G.month.days.length-1].date+" 23:59:59"},to_date:{from:G.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:G.contacts.map(function(e){return e.id})},type_id:{IN:e.pluck(G.supportData.absenceTypes,"id")}},null,null,null,!1).then(function(e){return $(e.list)})}function x(){var t=G.month.days[0].date,n=G.month.days[G.month.days.length-1].date;return o.get(G.contacts.map(function(e){return e.id}),t,n).then(function(t){V=e.indexBy(t,"contact_id")})}function O(){return G.contactIdsToReduceTo&&(G.contacts=G.contacts.filter(function(t){return e.includes(G.contactIdsToReduceTo,t.contact_id)||e.find(Y,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);Y[t.contact_id]=Y[t.contact_id]||{},n.forEach(function(n){e.remove(Y[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),W.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return Y[n]&&Y[n][t.date]?Y[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(G.month.days.map(function(e){return a.all(G.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){G.currentPage=0,G.visible=!0,(t||!H)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(G.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=!1,W=[],V={},Y={},G=this;G.currentPage=0,G.pageSize=20,G.visible=!1,G.showContactName=!!G.showContactName,G.showOnlyWithLeaveRequests=!!G.showOnlyWithLeaveRequests,G.$onDestroy=L,G.contactsList=f,G.getContactUrl=b,function(){var e=t().month(G.month.month).year(G.month.year);_(),q(),G.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function b(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function g(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&g()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function g(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function b(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]} -}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),g()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",b),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,g,b,y,_,$,q,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Le.isMode("edit")&&(e=e&&(V()||D())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function I(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==N())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Le.getStatusFromValue(Le.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Le.requestStatuses[e]})}function N(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():F("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Re,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Le.isMode("edit")?be:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=N(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=$.init(t):"toil"===e&&(Le.request=q.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,g.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Te.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function ge(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function be(){Re=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,I(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then($e).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function $e(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then(qe).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=R,Le.canSubmit=S,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){ -return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";E(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){O("previous"),O("next")}function E(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.absenceTypesToFilterBy.length||e.includes(u.absenceTypesToFilterBy,t)}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{ +public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug, +pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 56978ae4db1..38d68c09dc3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -20,9 +20,9 @@ define([ function leaveCalendarLegendController ($log, $rootScope) { $log.debug('Component: leave-calendar-legend'); - var absenceTypesToFilterBy = []; var vm = this; + vm.absenceTypesToFilterBy = []; vm.legendCollapsed = true; vm.nonWorkingDayTypes = [ { label: 'Weekend', cssClassSuffix: 'weekend' }, @@ -53,20 +53,19 @@ define([ * @return {Boolean} */ function checkIfAbsenceTypeIsSelectedForFiltering (absenceTypeId) { - return !absenceTypesToFilterBy.length || - _.includes(absenceTypesToFilterBy, absenceTypeId); + return !vm.absenceTypesToFilterBy.length || + _.includes(vm.absenceTypesToFilterBy, absenceTypeId); } /** - * Uses the absence type color to return border and background color styles + * Uses the absence type color to return background color style * * @param {AbsenceTypeInstance} absenceType * @return {Object} */ function getAbsenceTypeStyle (absenceType) { return { - backgroundColor: absenceType.color, - borderColor: absenceType.color + backgroundColor: absenceType.color }; } @@ -75,11 +74,11 @@ define([ */ function initWatchers () { $rootScope.$new().$watch(function () { - return absenceTypesToFilterBy; + return vm.absenceTypesToFilterBy; }, function (newValue, oldValue) { if (newValue !== oldValue) { $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', - absenceTypesToFilterBy); + vm.absenceTypesToFilterBy); } }, true); } @@ -88,7 +87,7 @@ define([ * Resets filtering by absence types */ function resetFilteringByAbsenceTypes () { - absenceTypesToFilterBy = []; + vm.absenceTypesToFilterBy = []; } /** @@ -97,10 +96,10 @@ define([ * @param {String} absenceTypeId */ function toggleFilteringByAbsenceType (absenceTypeId) { - if (!_.includes(absenceTypesToFilterBy, absenceTypeId)) { - absenceTypesToFilterBy.push(absenceTypeId); + if (!_.includes(vm.absenceTypesToFilterBy, absenceTypeId)) { + vm.absenceTypesToFilterBy.push(absenceTypeId); } else { - _.remove(absenceTypesToFilterBy, function (_absenceTypeId_) { + _.remove(vm.absenceTypesToFilterBy, function (_absenceTypeId_) { return absenceTypeId === _absenceTypeId_; }); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index 5260378a47b..5343444f2dd 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -447,10 +447,10 @@ define([ : _.pluck(vm.supportData.absenceTypes, 'id') } }; - leaveRequests = {}; - return LeaveRequest.all(params, null, null, null, false) .then(function (leaveRequestsData) { + leaveRequests = {}; + return indexLeaveRequests(leaveRequestsData.list); }); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index 9ba5c036da8..49ea290920a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -61,10 +61,7 @@ define([ }); it('uses the color of the given absence type to define border and background colors', function () { - expect(style).toEqual({ - backgroundColor: absenceType.color, - borderColor: absenceType.color - }); + expect(style).toEqual({ backgroundColor: absenceType.color }); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index 803702cb983..1f4ca124f45 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -955,7 +955,7 @@ */ function compileComponent (sendSignal) { controller = $componentController('leaveCalendarMonth', null, { - contacts: ContactData.all.values, + contacts: _.clone(ContactData.all.values), month: february, period: period2016, supportData: { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index ee49afb61d3..b36feabf2ad 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -6,7 +6,7 @@ $chr-leave-calendar-item-public-holiday-background-color: #8ec68a; $chr-leave-calendar-item-requested-border-height: 0.5em; $chr-leave-calendar-legend-header-top-margin: 20px; $chr-leave-calendar-legend-badge-border-radius: 2px; -$chr-leave-calendar-legend-badge-padding: 0 8px; +$chr-leave-calendar-legend-badge-padding: 8px; $chr-leave-calendar-legend-badge-margin: 10px; $chr-leave-calendar-legend-badge-size: 24px; $chr-leave-calendar-legend-badge-square-right-margin: 20px; @@ -188,7 +188,7 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; color: $crm-white; margin-right: $chr-leave-calendar-legend-badge-margin; margin-top: 10px; - padding: $chr-leave-calendar-legend-badge-padding; + padding: 0 $chr-leave-calendar-legend-badge-padding; &.chr_leave-calendar__legend__type-badge-weekend { background-color: $chr-leave-calendar-item-weekend-background-color; @@ -202,11 +202,27 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; background-color: $chr-leave-calendar-item-public-holiday-background-color; } + &.chr_leave-calendar__legend__type-badge-selected { + border: solid 1px $crm-white; + border-radius: #{$chr-leave-calendar-legend-badge-border-radius + 2px}; + box-shadow: 0 0 1px 0 $chr-leave-calendar-item-weekend-background-color; + height: #{$chr-leave-calendar-legend-badge-size + 2px}; + margin-bottom: -1px; + margin-left: -2px; + margin-right: #{$chr-leave-calendar-legend-badge-margin - 1px}; + margin-top: #{$chr-leave-calendar-legend-badge-margin - 1px}; + padding-left: #{$chr-leave-calendar-legend-badge-padding + 1px}; + } + &.chr_leave-calendar__legend__type-badge-not-selected { opacity: 0.4; } } +.chr_leave-calendar__legend__reset-absence-types-filter { + color: $gray-darker; +} + .chr_leave-calendar__legend__other-badge { border: solid 1px $crm-grayblue-dark; border-radius: $chr-leave-calendar-legend-badge-border-radius; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index 2a9ecb00e8f..8073a3c6e1f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -10,16 +10,25 @@

    Types
    - {{legend.absenceTypesToFilterBy}}
    {{absenceType.title}}
    +
    + + Reset filters +
    Date: Tue, 29 May 2018 16:16:32 +0100 Subject: [PATCH 177/251] PCHR-3657: PR Feedback --- .../js/angular/dist/absence-tab.min.js | 2 +- .../js/angular/dist/admin-dashboard.min.js | 4 ++-- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../components/leave-calendar-legend.component.js | 14 +++++++++----- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index f61e29733bf..25ffc77199a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,4 +1,4 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(L)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),L(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&O).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){x(n())}function O(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){return!c.absenceTypesToFilterBy.length||e.includes(c.absenceTypesToFilterBy,n)}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(L)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),L(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&O).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){x(n())}function O(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy },function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([O(),L()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function L(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function O(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),L("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,L("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function L(e){return ne.selectedAbsenceType.calculation_unit_name===e}function O(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(O("sickness")||L("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(L("hours")||O("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=L,ne.isLeaveType=O,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function L(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function O(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this ;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),L(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(L)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function L(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function O(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=O,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&O(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function L(e){c.uiOptions.times[e].time=""}function O(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?O():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=L,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function L(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function O(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Oe)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Le}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Le=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Le})}):f.find(Le).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Oe)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,L(),P(),xe.request.isValid().then(ee()&&O).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Le="",Oe="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){ o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index b1c2326d605..fea8695113c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.absenceTypesToFilterBy.length||e.includes(u.absenceTypesToFilterBy,t)}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation", -btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{ +title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={}, Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index f1add86565f..e2e59979f96 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.absenceTypesToFilterBy.length||e.includes(u.absenceTypesToFilterBy,t)}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1, Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index d76d1b327cf..2e283cde50f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";E(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){O("previous"),O("next")}function E(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){return!u.absenceTypesToFilterBy.length||e.includes(u.absenceTypesToFilterBy,t)}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{ +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{ public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug, pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 38d68c09dc3..638622a59f6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -53,8 +53,10 @@ define([ * @return {Boolean} */ function checkIfAbsenceTypeIsSelectedForFiltering (absenceTypeId) { - return !vm.absenceTypesToFilterBy.length || - _.includes(vm.absenceTypesToFilterBy, absenceTypeId); + var isIncludedInTheAbsenceTypeFilters = _.includes(vm.absenceTypesToFilterBy, absenceTypeId); + var noAbsenceTypesFiltersHaveBeenSelected = !vm.absenceTypesToFilterBy.length; + + return noAbsenceTypesFiltersHaveBeenSelected || isIncludedInTheAbsenceTypeFilters; } /** @@ -96,12 +98,14 @@ define([ * @param {String} absenceTypeId */ function toggleFilteringByAbsenceType (absenceTypeId) { - if (!_.includes(vm.absenceTypesToFilterBy, absenceTypeId)) { - vm.absenceTypesToFilterBy.push(absenceTypeId); - } else { + var hasAlreadyBeenSelected = _.includes(vm.absenceTypesToFilterBy, absenceTypeId); + + if (hasAlreadyBeenSelected) { _.remove(vm.absenceTypesToFilterBy, function (_absenceTypeId_) { return absenceTypeId === _absenceTypeId_; }); + } else { + vm.absenceTypesToFilterBy.push(absenceTypeId); } } } From 3f004cd1a973f519d1f1e4cca6db75727c912426 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 23 May 2018 22:48:26 +0100 Subject: [PATCH 178/251] PCHR-3717: Add clickable tooltip decorator --- .../decorators/uib-tooltip.decorator.js | 150 ++++++++++++ .../decorators/uib-tooltip.decorator.spec.js | 230 ++++++++++++++++++ 2 files changed, 380 insertions(+) create mode 100644 org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js create mode 100644 org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js new file mode 100644 index 00000000000..3e05c648dc1 --- /dev/null +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -0,0 +1,150 @@ +/* eslint-env amd */ + +define([ + 'common/angular', + 'common/angularBootstrap' +], function (angular) { + 'use strict'; + + var $document, $timeout; + + return ['$delegate', '$document', '$timeout', function ($delegate, _$document_, _$timeout_) { + $document = _$document_; + $timeout = _$timeout_; + + return function () { + var tooltip = $delegate.apply(this, arguments); + var compilator = tooltip.compile; + var isTouchDevice = 'ontouchstart' in $document[0].documentElement; + var clickType = isTouchDevice ? 'touchend' : 'click'; + + tooltip.compile = function (tElement, tAttr) { + return function link (scope, $element, attributes, tooltipCtrl) { + var $overlay; + var isTooltipClickable = $element.attr('uib-tooltip-clickable'); + + isTooltipClickable && setInitialAttributesForClickableTooltip(); + compilator(tElement, tAttr)(scope, $element, attributes, tooltipCtrl); + isTooltipClickable && makeTooltipClickable(); + + /** + * Injects an overlay element to the original tooltip trigger element + */ + function injectOverlayToTriggerElement () { + $overlay = angular.element('
    '); + + $element.css({ 'position': 'relative' }); + $overlay.css({ + position: 'absolute', + height: '100%', + width: '100%', + 'z-index': 1, + top: 0, + left: 0 + }); + $element.append($overlay); + } + + /** + * Makes the tooltip clickable + * by making it hoverable on non-touch devices + * and dismissable on touch devices + */ + function makeTooltipClickable (attributes) { + isTouchDevice && injectOverlayToTriggerElement(); + setEventHandlersToTriggerElements(); + } + + /** + * Sets handlers to the tooltip trigger elements + */ + function setEventHandlersToTriggerElements () { + if (isTouchDevice) { + $overlay.on('touchend', function (event) { + toggleTooltip('source', true, false, event); + !scope.open && setEventHandlersToTooltip(); + }); + $document.find('body').on('touchend', function () { + toggleTooltip('source', false, false); + toggleTooltip('tooltip', false, false); + }); + $overlay.on('click', function (event) { + event.stopPropagation(); + }); + } else { + $element.on('mouseenter', function () { + toggleTooltip('source', true, false); + !scope.open && setEventHandlersToTooltip(); + }); + $element.on('mouseleave', function () { + toggleTooltip('source', false, true); + }); + } + + $element.on(clickType, function () { + toggleTooltip('source', false, false); + toggleTooltip('tooltip', false, false); + }); + } + + /** + * Sets event handlers to the tooltip itself + */ + function setEventHandlersToTooltip () { + var $tooltip; + + $timeout(function () { + $tooltip = $document.find('.tooltip-clickable-template:visible:last'); + + $tooltip.on('mouseenter', function () { + toggleTooltip('tooltip', true, false); + }); + $tooltip.on('mouseleave', function () { + toggleTooltip('tooltip', false, true); + }); + $tooltip.on(clickType, function () { + toggleTooltip('source', false, false); + toggleTooltip('tooltip', false, false); + }); + }); + } + + /** + * Sets initial attributes for clickable tooltip + */ + function setInitialAttributesForClickableTooltip () { + attributes.tooltipTrigger = 'customShow'; + attributes.tooltipAnimation = false; + } + + /** + * Shows/hides tooltip + * + * @param {String} elementType source|tooltip + * @param {Boolean} elementIsHovered is element currently hovered or not + * @param {Boolean} delayEvent should the event be delayed + * @param {Event} eventToNotBePropagated if passed, it will not be propagated + */ + function toggleTooltip (elementType, elementIsHovered, delayEvent, eventToNotBePropagated) { + var timeout = delayEvent ? 100 : 0; + + $timeout(function () { + scope[elementType + '_hovered'] = elementIsHovered; + scope.open = scope.source_hovered || scope.tooltip_hovered; + + $element.trigger('custom' + (scope.open ? 'Show' : 'Hide')); + isTouchDevice && $overlay[scope.open ? 'hide' : 'show'](); + }, timeout); + + if (eventToNotBePropagated) { + eventToNotBePropagated.stopPropagation(); + eventToNotBePropagated.stopImmediatePropagation(); + } + } + }; + }; + + return tooltip; + }; + }]; +}); diff --git a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js new file mode 100644 index 00000000000..1ab715ce386 --- /dev/null +++ b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js @@ -0,0 +1,230 @@ +/* eslint-env amd, jasmine */ + +define([ + 'common/angularMocks', + 'common/angular', + 'common/decorators/uib-tooltip.decorator', + 'common/lodash', + 'common/angularBootstrap' +], function (angularMocks, angular, $uibTooltipDecorator, _) { + 'use strict'; + + describe('$uiTooltip.clickable', function () { + var $compile, $document, $rootScope, $triggerElement, $timeout, $tooltipElement, $provide; + + beforeEach(function () { + module('ui.bootstrap'); + module(function (_$provide_, _$uibTooltipProvider_) { + $provide = _$provide_; + + _$uibTooltipProvider_.setTriggers({ 'customShow': 'customHide' }); + }); + inject(function () { + $provide.decorator('$uibTooltip', $uibTooltipDecorator); + }); + }); + beforeEach(inject(function (_$compile_, _$document_, _$rootScope_, _$timeout_) { + $compile = _$compile_; + $document = _$document_; + $rootScope = _$rootScope_; + $timeout = _$timeout_; + })); + + describe('when a document with a tooltip with the "uib-tooltip-clickable" attribute is opened', function () { + beforeEach(function () { + cleanDocument(); + + $triggerElement = angular.element('
    '); + }); + + it('does not yet show the tooltip', function () { + expect(getTooltipVisibility()).toBe(false); + }); + + describe('non-touch device', function () { + beforeEach(function () { + $compile($triggerElement)($rootScope.$new()); + $document.find('body').append($triggerElement); + }); + + describe('when the trigger element is hovered', function () { + beforeEach(function () { + $triggerElement.trigger('mouseenter'); + flushTimeout(); + + $tooltipElement = $document.find('.tooltip-clickable-template'); + }); + + it('shows the tooltip', function () { + expect(getTooltipVisibility()).toBe(true); + }); + + describe('when the trigger tooltip is unhovered', function () { + beforeEach(function () { + $triggerElement.trigger('mouseleave'); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility()).toBe(false); + }); + }); + + describe('when the opened tooltip is hovered', function () { + beforeEach(function () { + $triggerElement.trigger('mouseleave'); + flushTimeout(); + $tooltipElement.trigger('mouseenter'); + flushTimeout(); + }); + + it('keeps the tooltip shown', function () { + expect(getTooltipVisibility()).toBe(true); + }); + + describe('when the opened tooltip is unhovered', function () { + beforeEach(function () { + $tooltipElement.trigger('mouseleave'); + flushTimeout(2); + }); + + it('keeps the tooltip shown', function () { + expect(getTooltipVisibility()).toBe(false); + }); + }); + }); + }); + }); + + describe('touch device', function () { + var $overlay; + + beforeEach(function () { + simulateTouchDevice(); + + $compile($triggerElement)($rootScope.$new()); + $document.find('body').append($triggerElement); + + $overlay = $triggerElement.find('.tooltip-overlay'); + $rootScope.$digest(); + }); + + it('creates an properly styled overlay over the trigger element', function () { + expect($overlay.length).toBe(1); + expect($overlay[0].style.position).toBe('absolute'); + expect($overlay[0].style.height).toBe('100%'); + expect($overlay[0].style.height).toBe('100%'); + expect($overlay[0].style.width).toBe('100%'); + expect($overlay[0].style.top).toBe('0px'); + expect($overlay[0].style.left).toBe('0px'); + expect($overlay[0].style['z-index']).toBe('1'); + }); + + describe('when the overlay is tapped', function () { + beforeEach(function () { + $overlay.trigger('touchend'); + flushTimeout(); + + $tooltipElement = $document.find('.tooltip-clickable-template'); + }); + + it('shows the tooltip', function () { + expect(getTooltipVisibility()).toBe(true); + }); + + it('hides the overlay', function () { + expect(getOverlayVisibility()).toBe(false); + }); + + describe('when the trigger element is tapped', function () { + beforeEach(function () { + $triggerElement.trigger('touchend'); + $rootScope.$digest(); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility()).toBe(false); + }); + + it('shows the overlay', function () { + expect(getOverlayVisibility()).toBe(true); + }); + }); + + describe('when the tooltip clicked', function () { + beforeEach(function () { + $tooltipElement.trigger('touchend'); + $rootScope.$digest(); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility()).toBe(false); + }); + + it('shows the overlay', function () { + expect(getOverlayVisibility()).toBe(true); + }); + }); + + describe('when the trigger tooltip is unhovered', function () { + beforeEach(function () { + $document.find('body').trigger('touchend'); + $rootScope.$digest(); + flushTimeout(2); + }); + + it('hides the tooltip', function () { + expect(getTooltipVisibility()).toBe(false); + }); + }); + }); + }); + }); + + /** + * Cleans the document from tooltips trigger elements + */ + function cleanDocument () { + $document.find('[uib-tooltip-clickable]').remove(); + } + + /** + * Flushes timeouts one or more times + */ + function flushTimeout (times) { + times = times || 1; + + _.times(times, function () { + $timeout.flush(); + }); + } + + /** + * Checks if the overlay is currently visible + * + * @return {Boolean} + */ + function getOverlayVisibility () { + return !!$triggerElement.find('.tooltip-overlay:visible').length; + } + + /** + * Checks if the tooltip is currently visible + * + * @return {Boolean} + */ + function getTooltipVisibility () { + return !!$document.find('.tooltip-clickable-template:visible').length; + } + + /** + * Simulates a touch device by simply telling the browser + * that the `ontouchstart` event handler exists + */ + function simulateTouchDevice () { + $document[0].documentElement.ontouchstart = true; + } + }); +}); From 72a09604cfa892ef224df39facc0f59f4b1488b7 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 23 May 2018 22:48:38 +0100 Subject: [PATCH 179/251] PCHR-3717: Apply the tooltip decorator --- .../src/common/modules/directives.js | 11 ++- .../leave-calendar-day.component.js | 36 +-------- .../leave-calendar-day.component.spec.js | 73 +------------------ .../shared/components/leave-calendar-day.html | 15 +--- 4 files changed, 16 insertions(+), 119 deletions(-) diff --git a/org.civicrm.reqangular/src/common/modules/directives.js b/org.civicrm.reqangular/src/common/modules/directives.js index fa6663660c4..4c0024e925a 100644 --- a/org.civicrm.reqangular/src/common/modules/directives.js +++ b/org.civicrm.reqangular/src/common/modules/directives.js @@ -1,4 +1,6 @@ /* eslint-env amd */ +/* globals jQuery */ + define([ 'common/angular', 'common/decorators/ui-select-focus.decorator', @@ -7,6 +9,7 @@ define([ 'common/decorators/xeditable-disable-calendar-icon.decorator', 'common/decorators/ui-bootstrap/uib-tabset', 'common/decorators/ui-bootstrap/uib-modal.decorator', + 'common/decorators/uib-tooltip.decorator', 'common/angularBootstrap', 'common/angularXeditable', 'common/ui-select', @@ -14,17 +17,19 @@ define([ 'common/modules/controllers', 'common/modules/services', 'common/modules/apis' -], function (angular, uiSelectFocusDecorator, uibCalendarIconDecorator, uibCalendarMobileVersion, xeditableDisableCalendarIcon, uibTabset, uibModalDecorator) { +], function (angular, uiSelectFocusDecorator, uibCalendarIconDecorator, uibCalendarMobileVersion, xeditableDisableCalendarIcon, uibTabset, uibModalDecorator, uibTooltipDecorator) { 'use strict'; return angular.module('common.directives', ['common.templates', 'common.controllers', 'ui.select', 'ui.bootstrap', 'xeditable']) - .config(['$provide', function ($provide) { + .config(['$provide', '$uibTooltipProvider', function ($provide, $uibTooltipProvider) { + $uibTooltipProvider.setTriggers({ 'customShow': 'customHide' }); $provide.decorator('uibDatepickerPopupDirective', uibCalendarMobileVersion); $provide.decorator('uibDatepickerPopupDirective', uibCalendarIconDecorator); $provide.decorator('uibTabsetDirective', uibTabset); $provide.decorator('$uibModal', uibModalDecorator); $provide.decorator('editableBsdateDirective', xeditableDisableCalendarIcon); $provide.decorator('uiSelectDirective', uiSelectFocusDecorator); + $provide.decorator('$uibTooltip', uibTooltipDecorator); }]) .run(['$templateCache', function ($templateCache) { // Update uib-tabset HTML with header class @@ -32,6 +37,6 @@ define([ var tpl = jQuery($templateCache.get(tplPath)); tpl.find('ul').addClass('{{tabset.customHeaderClass}}'); $templateCache.put(tplPath, tpl.wrap('
    ').parent().html()); - //end of uib-tabset override + // end of uib-tabset override }]); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js index 837fe05646a..abfedb65495 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js @@ -18,22 +18,15 @@ define([ controller: LeaveCalendarDayController }); - LeaveCalendarDayController.$inject = ['$log', '$scope', '$timeout', 'LeavePopup']; + LeaveCalendarDayController.$inject = ['$log', '$scope', 'LeavePopup']; - function LeaveCalendarDayController ($log, $scope, $timeout, LeavePopup) { + function LeaveCalendarDayController ($log, $scope, LeavePopup) { 'use strict'; $log.debug('Component: leave-calendar-day'); var vm = this; - vm.tooltip = { - show: false, - day_cell_hovered: false, - tooltip_hovered: false - }; - vm.openLeavePopup = openLeavePopup; - vm.toggleTooltip = toggleTooltip; (function init () { watchLeaveRequests(); @@ -42,10 +35,6 @@ define([ /** * Opens the leave request popup * - * When leave-request-actions.component sits inside manage-request component's table rows, - * and the table row has a click event to open leave request, so event.stopPropagation() - * is necessary to prevent the parents click event from being called - * * @param {Object} event * @param {Object} leaveRequest * @param {String} leaveType @@ -53,7 +42,6 @@ define([ * @param {Boolean} isSelfRecord */ function openLeavePopup (event, leaveRequest, leaveType, selectedContactId, isSelfRecord) { - event.stopPropagation(); LeavePopup.openModal(leaveRequest, leaveType, selectedContactId, isSelfRecord); } @@ -195,26 +183,6 @@ define([ }); } - /** - * Toggles tooltip for the day. - * It reacts to entering/leaving either day cell or the tooltip itself, - * if either of the elements are hovered, it remains the tooltip open. - * It instantly shows a tooltip, but has a 100ms timeout to hide it once unhovered. - * - * @TODO this should be moved to a decorator to uib-tooltip - * - * @param {String} sourceElement day_cell|tooltip - * @param {Boolean} isHovered - */ - function toggleTooltip (sourceElement, isHovered) { - $timeout(function () { - vm.tooltip[sourceElement + '_hovered'] = isHovered; - - vm.tooltip.show = - vm.tooltip.day_cell_hovered || vm.tooltip.tooltip_hovered; - }, isHovered ? 0 : 100); - } - /** * Waits for the leave request to be accesible before mapping the necessary * leave request fields to it. diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js index 34e66b77bb4..3b2177b19b0 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js @@ -12,16 +12,15 @@ define([ 'use strict'; describe('leaveCalendarDay', function () { - var $componentController, $log, $rootScope, $timeout, absenceType, absenceTypes, + var $componentController, $log, $rootScope, absenceType, absenceTypes, calculationUnits, calculationUnitInDays, calculationUnitInHours, contactData, controller, dayTypes, LeavePopup, leaveRequest, leaveRequestAttributes; beforeEach(module('manager-leave')); - beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_, _$timeout_, _LeavePopup_) { + beforeEach(inject(function (_$componentController_, _$log_, _$rootScope_, _LeavePopup_) { $componentController = _$componentController_; $log = _$log_; $rootScope = _$rootScope_; - $timeout = _$timeout_; absenceTypes = _.cloneDeep(absenceTypeData.all().values); contactData = {}; leaveRequest = _.cloneDeep(leaveRequestData.all().values[0]); @@ -253,74 +252,6 @@ define([ it('opens the leave request popup', function () { expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); }); - - it('stops the event from propagating', function () { - expect(event.stopPropagation).toHaveBeenCalled(); - }); - }); - - // @TODO this should be moved to a decorator to uib-tooltip - describe('toggleTooltip()', function () { - it('has the tooltip hidden by default', function () { - expect(controller.tooltip.show).toBe(false); - }); - - describe('when user hovers the day cell', function () { - beforeEach(function () { - toggleTooltip('day_cell', true); - }); - - it('shows tooltip', function () { - expect(controller.tooltip.show).toBe(true); - }); - - describe('and then user unhovers the day cell', function () { - beforeEach(function () { - toggleTooltip('day_cell', false); - }); - - it('hides the tooltip', function () { - expect(controller.tooltip.show).toBe(false); - }); - }); - - describe('and then user unhovers the day cell but hovers the tooltip', function () { - beforeEach(function () { - toggleTooltip('day_cell', false); - toggleTooltip('tooltip', true); - }); - - it('leaves the tooltip shown', function () { - expect(controller.tooltip.show).toBe(true); - }); - - describe('and then user unhovers the tooltip', function () { - beforeEach(function () { - toggleTooltip('tooltip', false); - }); - - it('hides the tooltip', function () { - expect(controller.tooltip.show).toBe(false); - }); - }); - - describe('and then user unhovers the tooltip but hovers the day cell back', function () { - beforeEach(function () { - toggleTooltip('tooltip', false); - toggleTooltip('tooltip', true); - }); - - it('leaves the tooltip shown', function () { - expect(controller.tooltip.show).toBe(true); - }); - }); - }); - }); - - function toggleTooltip (sourceElement, isHovered) { - controller.toggleTooltip(sourceElement, isHovered); - $timeout.flush(); - } }); /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html index fb448f85674..b72755b9cf7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html @@ -1,13 +1,9 @@
    + ng-click="day.openLeavePopup($event, leaveRequest, null, null, $root.section === 'my-leave')">
    + class="tooltip-clickable-template">
    + ng-click="day.openLeavePopup($event, leaveRequest, null, null, $root.section === 'my-leave')">
    {{day.contactData.leaveRequestsAttributes[leaveRequest.id].absenceTypeTitle}}
    From 495e737e42e2cdbe157969edb421a7dceae68dea Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 23 May 2018 22:48:46 +0100 Subject: [PATCH 180/251] PCHR-3717: Add dist files --- org.civicrm.reqangular/dist/reqangular.min.js | 6 +++--- .../js/angular/dist/absence-tab.min.js | 8 ++++---- .../js/angular/dist/admin-dashboard.min.js | 8 ++++---- .../js/angular/dist/manager-leave.min.js | 8 ++++---- .../js/angular/dist/my-leave.min.js | 6 +++--- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index b3caae161c3..8846c741a78 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -115,7 +115,7 @@ e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1 return e+vi(Ei()*(t-e+1))}function _t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Mt(e,t,n){var r=-1,i=e.length;for(t=null==t?0:+t||0,0>t&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){ -define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); +;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r,i){var o=i[0];o.multiple&&n.click(function(e){0===angular.element(e.target).parents(".ui-select-match").length&&0===angular.element(e.target).parents(".ui-select-choices").length&&(n.find(".ui-select-search").focus(),o.open=!0,t.$apply())}),e.apply(this,arguments)}},e}]}),define("common/decorators/uib-datepicker-calendar-icon.decorator",["common/services/detect-device.service"],function(){"use strict";return["$delegate","detectDevice",function(e,t){function n(e,t){var n=angular.element('');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend",function(e){m("source",!0,!1,e),!l.open&&h()}),t.find("body").on("touchend",function(){m("source",!1,!1),m("tooltip",!1,!1)}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,!1),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,!0)})),u.on(s,function(){m("source",!1,!1),m("tooltip",!1,!1)})}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),e.on("mouseenter",function(){m("tooltip",!0,!1)}),e.on("mouseleave",function(){m("tooltip",!1,!0)}),e.on(s,function(){m("source",!1,!1),m("tooltip",!1,!1)})})}function m(e,t,r,i){var o=r?100:0;n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},o),i&&(i.stopPropagation(),i.stopImmediatePropagation())}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(e){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n\n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null +;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 25ffc77199a..d985c4d85d0 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(L)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),L(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&O).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){x(n())}function O(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o,s){"use strict";function i(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function r(e){return e.isAM?"AM":e.isPM?"PM":""}function c(e){var t=n(e.from_date).isSame(b.date,"day"),a=n(e.to_date).isSame(b.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function u(n,t){b.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:n.type_id}).title}function l(n,t){var a=e.find(b.supportData.absenceTypes,{id:n.type_id}),o=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function d(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function m(n,t){"days"===t.unit&&(t.from_date_type=e.find(b.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(b.supportData.dayTypes,{value:n.to_date_type}).label)}function f(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?r(n):c(e),n.label=t}function p(e){var n=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,u].forEach(function(t){t.call(this,e,n)})}function h(e,n){o(function(){b.tooltip[e+"_hovered"]=n,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},n?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}t.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=i,b.toggleTooltip=h,function(){v()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy -},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([O(),L()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function L(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function O(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),L("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,L("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function L(e){return ne.selectedAbsenceType.calculation_unit_name===e}function O(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(O("sickness")||L("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(L("hours")||O("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=L,ne.isLeaveType=O,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function L(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function O(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this -;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),L(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(L)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function L(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function O(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=O,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&O(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function L(e){c.uiOptions.times[e].time=""}function O(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?O():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=L,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function L(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function O(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Oe)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Le}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Le=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Le})}):f.find(Le).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Oe)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,L(),P(),xe.request.isValid().then(ee()&&O).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Le="",Oe="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){ -o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(L)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),L(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&O).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){x(n())}function O(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o){"use strict";function s(e,n,t,a,s){o.openModal(n,t,a,s)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function r(e){var t=n(e.from_date).isSame(h.date,"day"),a=n(e.to_date).isSame(h.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function c(n,t){h.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:n.type_id}).title}function u(n,t){var a=e.find(h.supportData.absenceTypes,{id:n.type_id}),o=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function l(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function d(n,t){"days"===t.unit&&(t.from_date_type=e.find(h.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(h.supportData.dayTypes,{value:n.to_date_type}).label)}function m(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?i(n):r(e),n.label=t}function f(e){var n=h.contactData.leaveRequestsAttributes[e.id];[u,d,m,l,c].forEach(function(t){t.call(this,e,n)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}t.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=s,function(){p()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){ +return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([O(),L()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function L(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function O(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),L("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,L("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function L(e){return ne.selectedAbsenceType.calculation_unit_name===e}function O(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(O("sickness")||L("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(L("hours")||O("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=L,ne.isLeaveType=O,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function L(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function O(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0}, +G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),L(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(L)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function L(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function O(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=O,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&O(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function L(e){c.uiOptions.times[e].time=""}function O(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?O():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=L,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function L(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function O(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Oe)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Le}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Le=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Le})}):f.find(Le).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Oe)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,L(),P(),xe.request.isValid().then(ee()&&O).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Le="",Oe="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}), +t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index fea8695113c..71a95723ccc 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{ -title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ -u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={}, -Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion", +btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){ +return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x, +Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index e2e59979f96..c8c3c19e7b1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(g.date,"day"),a=t(e.to_date).isSame(g.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){g.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(g.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(g.supportData.absenceTypes,{id:t.type_id}),r=e.find(g.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function f(t,n){"days"===n.unit&&(n.from_date_type=e.find(g.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(g.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=g.contactData.leaveRequestsAttributes[e.id];[l,f,m,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){g.tooltip[e+"_hovered"]=t,g.tooltip.show=g.tooltip.day_cell_hovered||g.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){g.contactData&&g.contactData.leaveRequests&&g.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var g=this;g.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},g.openLeavePopup=s,g.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), -define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ -var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1, -Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}), +define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times +;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1, +Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 2e283cde50f..df70a629672 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";E(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){O("previous"),O("next")}function E(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r,o){"use strict";function s(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function u(e){var n=t(e.from_date).isSame(b.date,"day"),a=t(e.to_date).isSame(b.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function c(t,n){b.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(b.supportData.absenceTypes,{id:t.type_id}).title}function l(t,n){var a=e.find(b.supportData.absenceTypes,{id:t.type_id}),r=e.find(b.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function d(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function m(t,n){"days"===n.unit&&(n.from_date_type=e.find(b.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(b.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?i(t):u(e),t.label=n}function p(e){var t=b.contactData.leaveRequestsAttributes[e.id];[l,m,f,d,c].forEach(function(n){n.call(this,e,t)})}function h(e,t){r(function(){b.tooltip[e+"_hovered"]=t,b.tooltip.show=b.tooltip.day_cell_hovered||b.tooltip.tooltip_hovered},t?0:100)}function v(){a.$watch("day.contactData.leaveRequests",function(){b.contactData&&b.contactData.leaveRequests&&b.contactData.leaveRequests.forEach(p)},!0)}n.debug("Component: leave-calendar-day");var b=this;b.tooltip={show:!1,day_cell_hovered:!1,tooltip_hovered:!1},b.openLeavePopup=s,b.toggleTooltip=h,function(){v()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","$timeout","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{ -public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug, -pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function f(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,m,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{ +in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){ +return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file From 741e23d21ce4600c919996cef07b8a44e779b691 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 24 May 2018 14:32:52 +0100 Subject: [PATCH 181/251] PCHR-3717: PR Feedback --- org.civicrm.reqangular/dist/reqangular.min.js | 2 +- .../decorators/uib-tooltip.decorator.js | 44 ++++++++----------- .../decorators/uib-tooltip.decorator.spec.js | 13 ++++-- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index 8846c741a78..0d62861ae8a 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -115,7 +115,7 @@ e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1 return e+vi(Ei()*(t-e+1))}function _t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Mt(e,t,n){var r=-1,i=e.length;for(t=null==t?0:+t||0,0>t&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend",function(e){m("source",!0,!1,e),!l.open&&h()}),t.find("body").on("touchend",function(){m("source",!1,!1),m("tooltip",!1,!1)}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,!1),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,!0)})),u.on(s,function(){m("source",!1,!1),m("tooltip",!1,!1)})}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),e.on("mouseenter",function(){m("tooltip",!0,!1)}),e.on("mouseleave",function(){m("tooltip",!1,!0)}),e.on(s,function(){m("source",!1,!1),m("tooltip",!1,!1)})})}function m(e,t,r,i){var o=r?100:0;n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},o),i&&(i.stopPropagation(),i.stopImmediatePropagation())}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(e){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n\n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:"');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend",function(e){m("source",!0,0),!l.open&&h(),e.stopPropagation()}),t.find("body").on("touchend",function(){m("source",!1,0),m("tooltip",!1,0)}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,0),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,100)})),u.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),e.on("mouseenter",function(){m("tooltip",!0,0)}),e.on("mouseleave",function(){m("tooltip",!1,100)}),e.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})})}function m(e,t,r){n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},r)}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null ;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js index 3e05c648dc1..d8c3a92eee6 100644 --- a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -28,7 +28,7 @@ define([ isTooltipClickable && makeTooltipClickable(); /** - * Injects an overlay element to the original tooltip trigger element + * Injects an overlay element to the original element that triggers the tooltip */ function injectOverlayToTriggerElement () { $overlay = angular.element('
    '); @@ -50,40 +50,42 @@ define([ * by making it hoverable on non-touch devices * and dismissable on touch devices */ - function makeTooltipClickable (attributes) { + function makeTooltipClickable () { isTouchDevice && injectOverlayToTriggerElement(); setEventHandlersToTriggerElements(); } /** - * Sets handlers to the tooltip trigger elements + * Defines the handlers that will be used + * to display the tooltip depending on the device */ function setEventHandlersToTriggerElements () { if (isTouchDevice) { $overlay.on('touchend', function (event) { - toggleTooltip('source', true, false, event); + toggleTooltip('source', true, 0); !scope.open && setEventHandlersToTooltip(); + event.stopPropagation(); }); $document.find('body').on('touchend', function () { - toggleTooltip('source', false, false); - toggleTooltip('tooltip', false, false); + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); }); $overlay.on('click', function (event) { event.stopPropagation(); }); } else { $element.on('mouseenter', function () { - toggleTooltip('source', true, false); + toggleTooltip('source', true, 0); !scope.open && setEventHandlersToTooltip(); }); $element.on('mouseleave', function () { - toggleTooltip('source', false, true); + toggleTooltip('source', false, 100); }); } $element.on(clickType, function () { - toggleTooltip('source', false, false); - toggleTooltip('tooltip', false, false); + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); }); } @@ -97,14 +99,14 @@ define([ $tooltip = $document.find('.tooltip-clickable-template:visible:last'); $tooltip.on('mouseenter', function () { - toggleTooltip('tooltip', true, false); + toggleTooltip('tooltip', true, 0); }); $tooltip.on('mouseleave', function () { - toggleTooltip('tooltip', false, true); + toggleTooltip('tooltip', false, 100); }); $tooltip.on(clickType, function () { - toggleTooltip('source', false, false); - toggleTooltip('tooltip', false, false); + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); }); }); } @@ -122,24 +124,16 @@ define([ * * @param {String} elementType source|tooltip * @param {Boolean} elementIsHovered is element currently hovered or not - * @param {Boolean} delayEvent should the event be delayed - * @param {Event} eventToNotBePropagated if passed, it will not be propagated + * @param {Number} delay the event handler should be deferred by */ - function toggleTooltip (elementType, elementIsHovered, delayEvent, eventToNotBePropagated) { - var timeout = delayEvent ? 100 : 0; - + function toggleTooltip (elementType, elementIsHovered, delay) { $timeout(function () { scope[elementType + '_hovered'] = elementIsHovered; scope.open = scope.source_hovered || scope.tooltip_hovered; $element.trigger('custom' + (scope.open ? 'Show' : 'Hide')); isTouchDevice && $overlay[scope.open ? 'hide' : 'show'](); - }, timeout); - - if (eventToNotBePropagated) { - eventToNotBePropagated.stopPropagation(); - eventToNotBePropagated.stopImmediatePropagation(); - } + }, delay); } }; }; diff --git a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js index 1ab715ce386..edd07b45a3c 100644 --- a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js +++ b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js @@ -34,7 +34,12 @@ define([ beforeEach(function () { cleanDocument(); - $triggerElement = angular.element('
    '); + $triggerElement = angular.element( + '
    ' + + '' + + '
    '); }); it('does not yet show the tooltip', function () { @@ -152,7 +157,7 @@ define([ }); }); - describe('when the tooltip clicked', function () { + describe('when the tooltip is tapped', function () { beforeEach(function () { $tooltipElement.trigger('touchend'); $rootScope.$digest(); @@ -191,7 +196,9 @@ define([ } /** - * Flushes timeouts one or more times + * Flushes timeouts one or more times. + * Multiple timeout flushes are needed because the tooltip library + * has a timeout when hiding a tooltip. */ function flushTimeout (times) { times = times || 1; From 216f500d7d40580401c56d931cc2cae97dce97d7 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Fri, 25 May 2018 12:07:05 +0100 Subject: [PATCH 182/251] PCHR-3718: Hide filters on mobile by default --- .../js/angular/dist/absence-tab.min.js | 8 ++--- .../js/angular/dist/admin-dashboard.min.js | 4 +-- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../components/leave-calendar.component.js | 1 + .../leave-calendar.component.spec.js | 4 +++ .../shared/components/leave-calendar.html | 35 +++++++++++++++---- 7 files changed, 41 insertions(+), 15 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index d985c4d85d0..2bf1fca41b1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(L)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),L(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&O).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){x(n())}function O(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o){"use strict";function s(e,n,t,a,s){o.openModal(n,t,a,s)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function r(e){var t=n(e.from_date).isSame(h.date,"day"),a=n(e.to_date).isSame(h.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function c(n,t){h.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:n.type_id}).title}function u(n,t){var a=e.find(h.supportData.absenceTypes,{id:n.type_id}),o=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function l(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function d(n,t){"days"===t.unit&&(t.from_date_type=e.find(h.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(h.supportData.dayTypes,{value:n.to_date_type}).label)}function m(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?i(n):r(e),n.label=t}function f(e){var n=h.contactData.leaveRequestsAttributes[e.id];[u,d,m,l,c].forEach(function(t){t.call(this,e,n)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}t.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=s,function(){p()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){ -return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([O(),L()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function L(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function O(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),L("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,L("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function L(e){return ne.selectedAbsenceType.calculation_unit_name===e}function O(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(O("sickness")||L("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(L("hours")||O("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=L,ne.isLeaveType=O,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function L(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function O(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0}, -G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),L(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(L)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function L(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function O(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=O,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&O(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function L(e){c.uiOptions.times[e].time=""}function O(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?O():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=L,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function L(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function O(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Oe)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Le}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Le=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Le})}):f.find(Le).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Oe)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,L(),P(),xe.request.isValid().then(ee()&&O).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Le="",Oe="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}), -t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o){"use strict";function s(e,n,t,a,s){o.openModal(n,t,a,s)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function r(e){var t=n(e.from_date).isSame(h.date,"day"),a=n(e.to_date).isSame(h.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function c(n,t){h.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:n.type_id}).title}function u(n,t){var a=e.find(h.supportData.absenceTypes,{id:n.type_id}),o=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function l(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function d(n,t){"days"===t.unit&&(t.from_date_type=e.find(h.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(h.supportData.dayTypes,{value:n.to_date_type}).label)}function m(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?i(n):r(e),n.label=t}function f(e){var n=h.contactData.leaveRequestsAttributes[e.id];[u,d,m,l,c].forEach(function(t){t.call(this,e,n)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}t.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=s,function(){p()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){ +e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function O(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function L(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={}, +G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){ +return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 71a95723ccc..45b0eaa80d7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion", -btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){ +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{ +title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){ return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x, Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index c8c3c19e7b1..5325b24e36c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}), +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}), define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times ;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1, Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index df70a629672..d6205418478 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";E(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){O("previous"),O("next")}function E(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function f(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,m,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{ +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function f(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,m,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{ in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){ return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index b4953e44c28..bfc7398fe49 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -42,6 +42,7 @@ define([ vm.supportData = {}; vm.loading = { calendar: true, page: true }; vm.filters = { + hideOnMobile: true, optionValues: {}, userSettings: { contact: null, diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index 9f1461f4e0d..130caa759e5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -126,6 +126,10 @@ ]); }); + it('hides filters on mobile viewport by default', function () { + expect(controller.filters.hideOnMobile).toBe(true); + }); + describe('after loading support data', function () { it('stores absence types', function () { expect(controller.supportData.absenceTypes.length).not.toBe(0); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html index 0bc1bf2ffed..19512de0f0b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html @@ -1,8 +1,16 @@
    +
    +
    + + Hide filters +
    +
    -
    +
    @@ -12,7 +20,7 @@
    -
    +
    -
    +
    -
    -
    +
    +
    + ng-class="{ 'col-lg-offset-6': !calendar.filtersByAssignee }">
    Date: Tue, 29 May 2018 17:54:35 +0100 Subject: [PATCH 184/251] PCHR-3726: Add Test for Admin User. Add Doc block. --- .../HRLeaveAndAbsences/BAO/LeaveRequest.php | 6 +- .../tests/phpunit/api/v3/LeaveRequestTest.php | 57 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php index 8989b443e4b..8c7d04a995c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/BAO/LeaveRequest.php @@ -1321,7 +1321,11 @@ public static function findById($id) { } /** - *{@inheritdoc} + * This is the LeaveRequest Implementation of the addSelectWhereClause method. It allows leave + * requests to be filtered based on LeaveRequest ACL rules. The filtering is done basically + * for TOIL requests. A staff can not fetch TOIL requests for other contacts, A manager cannot + * fetch TOIL requests for contacts that are not managees but an Admin can fetch all TOIL requests. + * Requests other than TOIL requests are not restricted by this ACL rules. */ public function addSelectWhereClause() { if (CRM_Core_Permission::check([['view all contacts', 'edit all contacts']])) { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index fb1a901203d..87a09b99a96 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -3892,6 +3892,63 @@ public function testGetAndGetFullShouldNotReturnToilRequestsForNonManageesWhenLo $this->assertEquals($contact2['id'], $result['values'][0]['contact_id']); } + public function testGetAndGetFullShouldReturnToilRequestsForAllContactsWhenLoggedInUserIsAnAdmin() { + $admin = ContactFabricator::fabricate(); + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($admin['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API', 'view all contacts']; + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $this->absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + 'request_type' => LeaveRequest::REQUEST_TYPE_TOIL + ]); + + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + } + public function testGetAndGetFullReturnsAllDataWhenLoggedInUserHasViewAllContactsPermission() { $adminID = 1; $contact1 = ContactFabricator::fabricate(); From f259c5737a5d13d51430a2583007f43d1700d17b Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Tue, 29 May 2018 17:54:48 +0100 Subject: [PATCH 185/251] PCHR-3725: Fix issue with tooltip staying after tap --- .../common/decorators/uib-tooltip.decorator.js | 15 +++++++++------ .../test/decorators/uib-tooltip.decorator.spec.js | 11 +++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js index d8c3a92eee6..823cc183358 100644 --- a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -98,12 +98,15 @@ define([ $timeout(function () { $tooltip = $document.find('.tooltip-clickable-template:visible:last'); - $tooltip.on('mouseenter', function () { - toggleTooltip('tooltip', true, 0); - }); - $tooltip.on('mouseleave', function () { - toggleTooltip('tooltip', false, 100); - }); + if (!isTouchDevice) { + $tooltip.on('mouseenter', function () { + toggleTooltip('tooltip', true, 0); + }); + $tooltip.on('mouseleave', function () { + toggleTooltip('tooltip', false, 100); + }); + } + $tooltip.on(clickType, function () { toggleTooltip('source', false, 0); toggleTooltip('tooltip', false, 0); diff --git a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js index edd07b45a3c..9a8bf093ba2 100644 --- a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js +++ b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js @@ -125,6 +125,17 @@ define([ expect($overlay[0].style['z-index']).toBe('1'); }); + describe('when the overlay is "hovered"', function () { + beforeEach(function () { + $overlay.trigger('mouseenter'); + flushTimeout(); + }); + + it('ignores "hover" event and does not show the tooltip', function () { + expect(getTooltipVisibility()).toBe(false); + }); + }); + describe('when the overlay is tapped', function () { beforeEach(function () { $overlay.trigger('touchend'); From 909e4acb2b1dc0866abca089dca7eccfefb5543f Mon Sep 17 00:00:00 2001 From: Debarshi Bhaumik Date: Fri, 25 May 2018 13:08:42 +0530 Subject: [PATCH 186/251] PCHR-3734: Update Task Badge when tasks are completed from SSP --- org.civicrm.reqangular/dist/reqangular.min.js | 6 +++--- .../common/components/notification-badge.component.js | 2 ++ .../components/notification-badge.component.spec.js | 11 +++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index c02c2bd891f..37adda80208 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -115,7 +115,7 @@ e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1 return e+vi(Ei()*(t-e+1))}function _t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Mt(e,t,n){var r=-1,i=e.length;for(t=null==t?0:+t||0,0>t&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'
    \n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("components/notification-badge.html",'\n {{badge.count}}\n\n\n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t) -;if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)}, -y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); +return r.getAll(e.apiName,e.params,null,null,null,"get",!1)});return n.all(t).then(function(t){s.count=e.reduce(t,function(e,t){return e+t.total},0)})}function a(){i.subscribe(s.refreshCountEventName,o),document.addEventListener(s.refreshCountEventName,o)}t.debug("Component: notification-badge");var s=this;s.count=0,function(){a(),o()}()}t.component("notificationBadge",{bindings:{filters:"<",refreshCountEventName:"<"},template:["$templateCache",function(e){return e.get("components/notification-badge.html")}],controllerAs:"badge",controller:n}),n.$inject=["$log","$q","api","pubSub"]}),define("common/bundles/components",["common/components/heatmap.component","common/components/notification-badge.component"],function(){}),define("common/decorators/ui-select-focus.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r,i){var o=i[0];o.multiple&&n.click(function(e){0===angular.element(e.target).parents(".ui-select-match").length&&0===angular.element(e.target).parents(".ui-select-choices").length&&(n.find(".ui-select-search").focus(),o.open=!0,t.$apply())}),e.apply(this,arguments)}},e}]}),define("common/decorators/uib-datepicker-calendar-icon.decorator",["common/services/detect-device.service"],function(){"use strict";return["$delegate","detectDevice",function(e,t){function n(e,t){var n=angular.element('');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n\n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("components/notification-badge.html",'\n {{badge.count}}\n\n\n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}} +;return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"}, +y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/org.civicrm.reqangular/src/common/components/notification-badge.component.js b/org.civicrm.reqangular/src/common/components/notification-badge.component.js index fc1c3b4735b..3d47d69b240 100644 --- a/org.civicrm.reqangular/src/common/components/notification-badge.component.js +++ b/org.civicrm.reqangular/src/common/components/notification-badge.component.js @@ -53,6 +53,8 @@ define([ */ function initListeners () { pubSub.subscribe(vm.refreshCountEventName, fetchCount); + // Event listener for non-angular context + document.addEventListener(vm.refreshCountEventName, fetchCount); } } }); diff --git a/org.civicrm.reqangular/test/components/notification-badge.component.spec.js b/org.civicrm.reqangular/test/components/notification-badge.component.spec.js index fc50f16f148..c08f0c893c1 100644 --- a/org.civicrm.reqangular/test/components/notification-badge.component.spec.js +++ b/org.civicrm.reqangular/test/components/notification-badge.component.spec.js @@ -76,6 +76,17 @@ define([ }); }); + describe('for events outside angular context', function () { + beforeEach(function () { + spyOn(document, 'addEventListener'); + compileComponent(); + }); + + it('listens to events fired outside of angular context', function () { + expect(document.addEventListener).toHaveBeenCalledWith(eventName, jasmine.any(Function)); + }); + }); + function compileComponent () { controller = $componentController('notificationBadge', null, { refreshCountEventName: eventName, From 365000aaf9b25c916942419a6b80cd39ba04adf9 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 30 May 2018 11:12:39 +0100 Subject: [PATCH 187/251] PCHR-3725: Ignore target element on body touch --- .../decorators/uib-tooltip.decorator.js | 18 ++-- .../decorators/uib-tooltip.decorator.spec.js | 92 +++++++++++++------ 2 files changed, 72 insertions(+), 38 deletions(-) diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js index 823cc183358..0f6005c650a 100644 --- a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -61,12 +61,15 @@ define([ */ function setEventHandlersToTriggerElements () { if (isTouchDevice) { - $overlay.on('touchend', function (event) { + $overlay.on('touchend', function () { toggleTooltip('source', true, 0); !scope.open && setEventHandlersToTooltip(); - event.stopPropagation(); }); - $document.find('body').on('touchend', function () { + $document.find('body').on('touchend', function (event) { + if (event.target === $overlay[0]) { + return; + } + toggleTooltip('source', false, 0); toggleTooltip('tooltip', false, 0); }); @@ -81,12 +84,11 @@ define([ $element.on('mouseleave', function () { toggleTooltip('source', false, 100); }); + $element.on('click', function () { + toggleTooltip('source', false, 0); + toggleTooltip('tooltip', false, 0); + }); } - - $element.on(clickType, function () { - toggleTooltip('source', false, 0); - toggleTooltip('tooltip', false, 0); - }); } /** diff --git a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js index 9a8bf093ba2..2cfe7a96ac6 100644 --- a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js +++ b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js @@ -10,7 +10,7 @@ define([ 'use strict'; describe('$uiTooltip.clickable', function () { - var $compile, $document, $rootScope, $triggerElement, $timeout, $tooltipElement, $provide; + var $compile, $content, $document, $rootScope, $triggerElement, $timeout, $tooltipElement, $provide; beforeEach(function () { module('ui.bootstrap'); @@ -34,22 +34,22 @@ define([ beforeEach(function () { cleanDocument(); - $triggerElement = angular.element( - '
    ' + - '' + + $content = angular.element( + '
    ' + + generateTriggerElementHTML('tooltip1') + + generateTriggerElementHTML('tooltip2') + '
    '); + $triggerElement = $content.find('[uib-tooltip-template]').eq(0); }); it('does not yet show the tooltip', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); describe('non-touch device', function () { beforeEach(function () { - $compile($triggerElement)($rootScope.$new()); - $document.find('body').append($triggerElement); + $compile($content)($rootScope.$new()); + $document.find('body').append($content); }); describe('when the trigger element is hovered', function () { @@ -61,7 +61,7 @@ define([ }); it('shows the tooltip', function () { - expect(getTooltipVisibility()).toBe(true); + expect(getTooltipVisibility('tooltip1')).toBe(true); }); describe('when the trigger tooltip is unhovered', function () { @@ -71,7 +71,7 @@ define([ }); it('hides the tooltip', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); }); @@ -84,7 +84,7 @@ define([ }); it('keeps the tooltip shown', function () { - expect(getTooltipVisibility()).toBe(true); + expect(getTooltipVisibility('tooltip1')).toBe(true); }); describe('when the opened tooltip is unhovered', function () { @@ -94,7 +94,7 @@ define([ }); it('keeps the tooltip shown', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); }); }); @@ -107,8 +107,8 @@ define([ beforeEach(function () { simulateTouchDevice(); - $compile($triggerElement)($rootScope.$new()); - $document.find('body').append($triggerElement); + $compile($content)($rootScope.$new()); + $document.find('body').append($content); $overlay = $triggerElement.find('.tooltip-overlay'); $rootScope.$digest(); @@ -132,7 +132,7 @@ define([ }); it('ignores "hover" event and does not show the tooltip', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); }); @@ -145,26 +145,43 @@ define([ }); it('shows the tooltip', function () { - expect(getTooltipVisibility()).toBe(true); + expect(getTooltipVisibility('tooltip1')).toBe(true); }); it('hides the overlay', function () { - expect(getOverlayVisibility()).toBe(false); + expect(getOverlayVisibility($triggerElement)).toBe(false); + }); + + describe('when another trigger element is tapped', function () { + var $triggerElement2, $overlay2; + + beforeEach(function () { + $triggerElement2 = $content.find('[uib-tooltip-template]').eq(1); + $overlay2 = $triggerElement2.find('.tooltip-overlay'); + + $overlay2.trigger('touchend'); + flushTimeout(); + }); + + it('opens the target tooltip and closes other tooltips', function () { + expect(getTooltipVisibility('tooltip2')).toBe(true); + expect(getTooltipVisibility('tooltip1')).toBe(false); + }); }); describe('when the trigger element is tapped', function () { beforeEach(function () { $triggerElement.trigger('touchend'); $rootScope.$digest(); - flushTimeout(2); + flushTimeout(); }); it('hides the tooltip', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); it('shows the overlay', function () { - expect(getOverlayVisibility()).toBe(true); + expect(getOverlayVisibility($triggerElement)).toBe(true); }); }); @@ -172,15 +189,15 @@ define([ beforeEach(function () { $tooltipElement.trigger('touchend'); $rootScope.$digest(); - flushTimeout(2); + flushTimeout(); }); it('hides the tooltip', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); it('shows the overlay', function () { - expect(getOverlayVisibility()).toBe(true); + expect(getOverlayVisibility($triggerElement)).toBe(true); }); }); @@ -188,11 +205,11 @@ define([ beforeEach(function () { $document.find('body').trigger('touchend'); $rootScope.$digest(); - flushTimeout(2); + flushTimeout(); }); it('hides the tooltip', function () { - expect(getTooltipVisibility()).toBe(false); + expect(getTooltipVisibility('tooltip1')).toBe(false); }); }); }); @@ -220,11 +237,26 @@ define([ } /** - * Checks if the overlay is currently visible + * Generates HTML for a trigger element with a given ID that is also used as the content + * + * @param {String} id + * @return {String} + */ + function generateTriggerElementHTML (id) { + return '
    ' + + '' + + '
    '; + } + + /** + * Checks if the overlay of the given target element is currently visible * + * @param {jQuery} $triggerElement * @return {Boolean} */ - function getOverlayVisibility () { + function getOverlayVisibility ($triggerElement) { return !!$triggerElement.find('.tooltip-overlay:visible').length; } @@ -233,8 +265,8 @@ define([ * * @return {Boolean} */ - function getTooltipVisibility () { - return !!$document.find('.tooltip-clickable-template:visible').length; + function getTooltipVisibility (content) { + return !!$document.find('.tooltip-clickable-template:visible:contains(' + content + ')').length; } /** From 34d2dbd40d4bc45bdb77921ba3dc3516e049e24e Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Wed, 30 May 2018 11:16:42 +0100 Subject: [PATCH 188/251] PCHR-3725: Add dist files --- org.civicrm.reqangular/dist/reqangular.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index 0d62861ae8a..ac2142a0e2d 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -115,7 +115,7 @@ e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1 return e+vi(Ei()*(t-e+1))}function _t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Mt(e,t,n){var r=-1,i=e.length;for(t=null==t?0:+t||0,0>t&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend",function(e){m("source",!0,0),!l.open&&h(),e.stopPropagation()}),t.find("body").on("touchend",function(){m("source",!1,0),m("tooltip",!1,0)}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,0),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,100)})),u.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),e.on("mouseenter",function(){m("tooltip",!0,0)}),e.on("mouseleave",function(){m("tooltip",!1,100)}),e.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})})}function m(e,t,r){n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},r)}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n\n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:"');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend",function(){m("source",!0,0),!l.open&&h()}),t.find("body").on("touchend",function(e){e.target!==g[0]&&(m("source",!1,0),m("tooltip",!1,0))}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,0),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,100)}),u.on("click",function(){m("source",!1,0),m("tooltip",!1,0)}))}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),a||(e.on("mouseenter",function(){m("tooltip",!0,0)}),e.on("mouseleave",function(){m("tooltip",!1,100)})),e.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})})}function m(e,t,r){n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},r)}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null ;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file From c5c8059d9766067b61656817c91456563b3c6972 Mon Sep 17 00:00:00 2001 From: Samson Alajede Date: Wed, 30 May 2018 17:16:07 +0100 Subject: [PATCH 189/251] PCHR-3743: Tool icon mouse pointer fixes --- hrjobcontract/views/modalChangeReason.html | 4 +-- hrjobcontract/views/modalForm.html | 36 +++++++++++----------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/hrjobcontract/views/modalChangeReason.html b/hrjobcontract/views/modalChangeReason.html index 60240ba989a..c1f53828ced 100644 --- a/hrjobcontract/views/modalChangeReason.html +++ b/hrjobcontract/views/modalChangeReason.html @@ -16,8 +16,8 @@
    diff --git a/hrjobcontract/views/modalForm.html b/hrjobcontract/views/modalForm.html index e2438aa77a8..4c8085cb001 100755 --- a/hrjobcontract/views/modalForm.html +++ b/hrjobcontract/views/modalForm.html @@ -41,8 +41,8 @@

    General

    @@ -59,8 +59,8 @@

    General

    @@ -121,8 +121,8 @@

    General

    @@ -253,8 +253,8 @@

    Hours

    @@ -347,8 +347,8 @@

    Pay

    @@ -436,8 +436,8 @@

    - - + +

    @@ -517,8 +517,8 @@

    - - + +

    @@ -712,8 +712,8 @@

    Health Insurance

    @@ -790,8 +790,8 @@

    Life Insurance

    From c8ad87f9ebfab1cfd15b46f8c017c217a2e8d8d4 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 31 May 2018 13:55:19 +0100 Subject: [PATCH 190/251] PCHR-3725: Fix inconsistent overlay event propagation on iOS --- .../src/common/decorators/uib-tooltip.decorator.js | 2 +- .../test/decorators/uib-tooltip.decorator.spec.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js index 0f6005c650a..37c581267a7 100644 --- a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -62,7 +62,7 @@ define([ function setEventHandlersToTriggerElements () { if (isTouchDevice) { $overlay.on('touchend', function () { - toggleTooltip('source', true, 0); + toggleTooltip('source', true, 50); !scope.open && setEventHandlersToTooltip(); }); $document.find('body').on('touchend', function (event) { diff --git a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js index 2cfe7a96ac6..d947d585882 100644 --- a/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js +++ b/org.civicrm.reqangular/test/decorators/uib-tooltip.decorator.spec.js @@ -160,7 +160,7 @@ define([ $overlay2 = $triggerElement2.find('.tooltip-overlay'); $overlay2.trigger('touchend'); - flushTimeout(); + flushTimeout(2); }); it('opens the target tooltip and closes other tooltips', function () { @@ -173,7 +173,7 @@ define([ beforeEach(function () { $triggerElement.trigger('touchend'); $rootScope.$digest(); - flushTimeout(); + flushTimeout(2); }); it('hides the tooltip', function () { @@ -189,7 +189,7 @@ define([ beforeEach(function () { $tooltipElement.trigger('touchend'); $rootScope.$digest(); - flushTimeout(); + flushTimeout(2); }); it('hides the tooltip', function () { @@ -205,7 +205,7 @@ define([ beforeEach(function () { $document.find('body').trigger('touchend'); $rootScope.$digest(); - flushTimeout(); + flushTimeout(2); }); it('hides the tooltip', function () { From 5f0db8b514a591e2276ff0348f92fe37e2ced195 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 31 May 2018 14:12:13 +0100 Subject: [PATCH 191/251] PCHR-3725: Fix issue with dates on iOS --- .../shared/components/leave-calendar-day.component.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js index abfedb65495..904cea45d2d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js @@ -120,8 +120,8 @@ define([ * @param {Object} leaveRequestAttributes */ function resolveLeaveRequestDates (leaveRequest, leaveRequestAttributes) { - leaveRequestAttributes.from_date = new Date(leaveRequest.from_date); - leaveRequestAttributes.to_date = new Date(leaveRequest.to_date); + leaveRequestAttributes.from_date = moment(leaveRequest.from_date).toDate(); + leaveRequestAttributes.to_date = moment(leaveRequest.to_date).toDate(); } /** From fd3d59b09abedf12be73e0d8a9ef8d132ae53232 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 31 May 2018 15:16:39 +0100 Subject: [PATCH 192/251] PCHR-3725: Fix taps on Android --- .../src/common/decorators/uib-tooltip.decorator.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js index 37c581267a7..5a802222f0a 100644 --- a/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js +++ b/org.civicrm.reqangular/src/common/decorators/uib-tooltip.decorator.js @@ -16,7 +16,7 @@ define([ var tooltip = $delegate.apply(this, arguments); var compilator = tooltip.compile; var isTouchDevice = 'ontouchstart' in $document[0].documentElement; - var clickType = isTouchDevice ? 'touchend' : 'click'; + var clickType = isTouchDevice ? 'touchend touchcancel' : 'click'; tooltip.compile = function (tElement, tAttr) { return function link (scope, $element, attributes, tooltipCtrl) { @@ -61,11 +61,11 @@ define([ */ function setEventHandlersToTriggerElements () { if (isTouchDevice) { - $overlay.on('touchend', function () { + $overlay.on('touchend touchcancel', function () { toggleTooltip('source', true, 50); !scope.open && setEventHandlersToTooltip(); }); - $document.find('body').on('touchend', function (event) { + $document.find('body').on('touchend touchcancel', function (event) { if (event.target === $overlay[0]) { return; } From 0cb8b45e557f52bb64b96435a13afc5431dd4e34 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 31 May 2018 15:27:24 +0100 Subject: [PATCH 193/251] PCHR-3725: Make legend badges style hoverable --- .../scss/components/_leave-calendar.scss | 3 ++- .../views/shared/components/leave-calendar-legend.html | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index b36feabf2ad..58954b5356a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -202,7 +202,8 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; background-color: $chr-leave-calendar-item-public-holiday-background-color; } - &.chr_leave-calendar__legend__type-badge-selected { + &.chr_leave-calendar__legend__type-badge-selected, + &.chr_leave-calendar__legend__type-badge-clickable:hover { border: solid 1px $crm-white; border-radius: #{$chr-leave-calendar-legend-badge-border-radius + 2px}; box-shadow: 0 0 1px 0 $chr-leave-calendar-item-weekend-background-color; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index 8073a3c6e1f..2c88265c7af 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -18,7 +18,8 @@

    {{absenceType.title}} From cd32826910cabff8a206661da78485d8f1b1c33b Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 31 May 2018 16:01:11 +0100 Subject: [PATCH 194/251] PCHR-3725: Expand legend by default --- .../shared/components/leave-calendar-legend.component.js | 2 +- .../shared/components/leave-calendar-legend.component.spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 638622a59f6..f93672d1f03 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -23,7 +23,7 @@ define([ var vm = this; vm.absenceTypesToFilterBy = []; - vm.legendCollapsed = true; + vm.legendCollapsed = false; vm.nonWorkingDayTypes = [ { label: 'Weekend', cssClassSuffix: 'weekend' }, { label: 'Public Holiday', cssClassSuffix: 'public-holiday' }, diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index 49ea290920a..0025952a814 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -26,8 +26,8 @@ define([ expect($log.debug).toHaveBeenCalled(); }); - it('is collapsed', function () { - expect(controller.legendCollapsed).toBe(true); + it('is expanded', function () { + expect(controller.legendCollapsed).toBe(false); }); it('has a list of "non working" day types badges', function () { From ccee5e6a84511930eb51f1f570c09412d8b7eeb2 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Thu, 31 May 2018 16:01:19 +0100 Subject: [PATCH 195/251] PCHR-3725: Add dist files --- org.civicrm.reqangular/dist/reqangular.min.js | 4 ++-- .../css/leaveandabsence.css | 2 +- .../js/angular/dist/absence-tab.min.js | 4 ++-- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/org.civicrm.reqangular/dist/reqangular.min.js b/org.civicrm.reqangular/dist/reqangular.min.js index 96daa3e59f6..2511def3a5c 100644 --- a/org.civicrm.reqangular/dist/reqangular.min.js +++ b/org.civicrm.reqangular/dist/reqangular.min.js @@ -115,7 +115,7 @@ e.x=(e.x-l.x)*r[0],e.y=(l.y-e.y)*r[1]}:function(e){e.x=(e.x-d)/(p-d)*r[0],e.y=(1 return e+vi(Ei()*(t-e+1))}function _t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Mt(e,t,n){var r=-1,i=e.length;for(t=null==t?0:+t||0,0>t&&(t=-t>i?0:i+t),n=n===$||n>i?i:+n||0,0>n&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0,n=Ur(i);++r=u)break e;o=r[o],i*="asc"===o||!0===o?1:-1;break e}i=t.b-n.b}return i})}function Ot(e,t){var n=0;return Ri(e,function(e,r,i){n+=+t(e,r,i)||0}),n}function Nt(e,t){var r=-1,i=xn(),o=e.length,a=i===n,s=a&&o>=I,l=s&&gi&&ci?new Ue(void 0):null,u=[];l?(i=He,a=!1):(s=!1,l=t?[]:u);e:for(;++ri(l,f,0)&&((t||s)&&l.push(f),u.push(c))}return u}function Rt(e,t){for(var n=-1,r=t.length,i=Ur(r);++n>>1,a=e[o];(n?a<=t:ai?$:o,i=1);++r=I)return t.plant(r).value();for(var i=0,e=n?o[i].apply(this,e):r;++iarguments.length;return"function"==typeof r&&o===$&&Mo(n)?e(n,r,i,a):_t(n,$n(r,o,4),i,a,t)}}function fn(e,t,n,r,i,o,a,s,l,u){function c(){for(var b=arguments.length,w=b,k=Ur(b);w--;)k[w]=arguments[w];if(r&&(k=Ht(k,r,i)),o&&(k=qt(k,o,a)),h||v){var w=c.placeholder,E=m(k,w),b=b-E.length;if(bt?0:t)):[]}function zn(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0,0>t?0:t)):[]}function Bn(e){return e?e[0]:$}function Yn(e,t,r){var i=e?e.length:0;if(!i)return-1;if("number"==typeof r)r=0>r?wi(i+r,0):r;else if(r)return r=Ft(e,t),rn?wi(i+n,0):n||0,"string"==typeof e||!Mo(e)&&wr(e)?n<=i&&-1t?0:+t||0,r);++n=e&&(t=$),n}}function lr(e,t,n){function r(t,n){n&&ai(n),l=d=p=$,t&&(h=ho(),u=e.apply(f,s),d||l||(s=f=$))}function i(){var e=t-(ho()-c);0>=e||e>t?r(p,l):d=fi(i,e)}function o(){r(g,d)}function a(){if(s=arguments,c=ho(),f=this,p=g&&(d||!v),!1===m)var n=v&&!d;else{l||v||(h=c);var r=m-(c-h),a=0>=r||r>m;a?(l&&(l=ai(l)),h=c,u=e.apply(f,s)):l||(l=fi(o,r))}return a&&d?d=ai(d):d||t===m||(d=fi(i,t)),n&&(a=!0,u=e.apply(f,s)),!a||d||l||(s=f=$),u}var s,l,u,c,f,d,p,h=0,m=!1,g=!0;if("function"!=typeof e)throw new Kr(j);if(t=0>t?0:+t||0,!0===n)var v=!0,g=!1;else gr(n)&&(v=!!n.leading,m="maxWait"in n&&wi(+n.maxWait||0,t),g="trailing"in n?!!n.trailing:g);return a.cancel=function(){d&&ai(d),l&&ai(l),h=0,l=d=p=$},a}function ur(e,t){function n(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;return o.has(i)?o.get(i):(r=e.apply(this,r),n.cache=o.set(i,r),r)}if("function"!=typeof e||t&&"function"!=typeof t)throw new Kr(j);return n.cache=new ur.Cache,n}function cr(e,t){if("function"!=typeof e)throw new Kr(j);return t=wi(t===$?e.length-1:+t||0,0),function(){for(var n=arguments,r=-1,i=wi(n.length-t,0),o=Ur(i);++rt}function dr(e){return p(e)&&Tn(e)&&ei.call(e,"callee")&&!ui.call(e,"callee")}function pr(e,t,n,r){return r=(n="function"==typeof n?Lt(n,r,3):$)?n(e,t):$,r===$?vt(e,t,n):!!r}function hr(e){return p(e)&&"string"==typeof e.message&&ni.call(e)==z}function mr(e){return gr(e)&&ni.call(e)==B}function gr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function vr(e){return null!=e&&(mr(e)?ii.test(Xr.call(e)):p(e)&&Se.test(e))}function yr(e){return"number"==typeof e||p(e)&&ni.call(e)==Y}function br(e){var t;if(!p(e)||ni.call(e)!=W||dr(e)||!(ei.call(e,"constructor")||"function"!=typeof(t=e.constructor)||t instanceof t))return!1;var n;return dt(e,function(e,t){n=t}),n===$||ei.call(e,n)}function $r(e){return gr(e)&&ni.call(e)==G}function wr(e){return"string"==typeof e||p(e)&&ni.call(e)==K}function xr(e){return p(e)&&Rn(e.length)&&!!Ne[ni.call(e)]}function Cr(e,t){return e(t=+t)||!e||!bi(t))return n;do{t%2&&(n+=e),t=vi(t/2),e+=e}while(t);return n}function Or(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(g(e),v(e)+1):(t+="",e.slice(o(e,t),a(e,t)+1)):e}function Nr(e,t,n){return n&&An(e,t,n)&&(t=$),e=i(e),e.match(t||Ae)||[]}function Rr(e,t,n){return n&&An(e,t,n)&&(t=$),p(e)?Pr(e):rt(e,t)}function Ir(e){return e}function Pr(e){return $t(it(e,!0))}function Fr(e,t,n){if(null==n){var r=gr(t),i=r?Lo(t):$;((i=i&&i.length?mt(t,i):$)?i.length:r)||(i=!1,n=t,t=e,e=this)}i||(i=mt(t,Lo(t)));var o=!0,r=-1,a=mr(e),s=i.length;!1===n?o=!1:gr(n)&&"chain"in n&&(o=n.chain);for(;++r=N)return n}else e=0;return ji(n,r)}}(),qi=cr(function(e,t){return p(e)&&Tn(e)?at(e,ft(t,!1,!0)):[]}),Vi=en(),zi=en(!0),Bi=cr(function(e){for(var t=e.length,r=t,i=Ur(c),o=xn(),a=o===n,s=[];r--;){var l=e[r]=Tn(l=e[r])?l:[];i[r]=a&&120<=l.length&&gi&&ci?new Ue(r&&l):null}var a=e[0],u=-1,c=a?a.length:0,f=i[0];e:for(;++u(f?He(f,l):o(s,l,0))){for(r=t;--r;){var d=i[r];if(0>(d?He(d,l):o(e[r],l,0)))continue e}f&&f.push(l),s.push(l)}return s}),Yi=cr(function(t,n){n=ft(n);var r=tt(t,n);return Et(t,n.sort(e)),r}),Wi=mn(),Gi=mn(!0),Ki=cr(function(e){return Nt(ft(e,!1,!0))}),Zi=cr(function(e,t){return Tn(e)?at(e,t):[]}),Ji=cr(Zn),Qi=cr(function(e){var t=e.length,n=2--e?t.apply(this,arguments):void 0}},Ie.ary=function(e,t,n){return n&&An(e,t,n)&&(t=$),t=e&&null==t?e.length:wi(+t||0,0),gn(e,T,$,$,$,$,t)},Ie.assign=Do,Ie.at=eo,Ie.before=sr,Ie.bind=mo,Ie.bindAll=go,Ie.bindKey=vo,Ie.callback=Rr,Ie.chain=Xn,Ie.chunk=function(e,t,n){t=(n?An(e,t,n):null==t)?1:wi(vi(t)||1,1),n=0;for(var r=e?e.length:0,i=-1,o=Ur(mi(r/t));nn&&(n=-n>i?0:i+n),r=r===$||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;nt?0:t)):[]},Ie.takeRight=function(e,t,n){var r=e?e.length:0;return r?((n?An(e,t,n):null==t)&&(t=1),t=r-(+t||0),Mt(e,0>t?0:t)):[]},Ie.takeRightWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3),!1,!0):[]},Ie.takeWhile=function(e,t,n){return e&&e.length?It(e,$n(t,n,3)):[]},Ie.tap=function(e,t,n){return t.call(n,e),e},Ie.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new Kr(j);return!1===n?r=!1:gr(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),lr(e,t,{leading:r,maxWait:+t,trailing:i})},Ie.thru=er,Ie.times=function(e,t,n){if(1>(e=vi(e))||!bi(e))return[];var r=-1,i=Ur(xi(e,4294967295));for(t=Lt(t,n,1);++rr?i[r]=t(r):t(r);return i},Ie.toArray=kr,Ie.toPlainObject=Er,Ie.transform=function(e,t,n,r){var i=Mo(e)||xr(e);return t=$n(t,r,4),null==n&&(i||gr(e)?(r=e.constructor,n=i?Mo(e)?new r:[]:Ni(mr(r)?r.prototype:$)):n={}),(i?Ve:pt)(e,function(e,r,i){return t(n,e,r,i)}),n},Ie.union=Ki,Ie.uniq=Kn,Ie.unzip=Zn,Ie.unzipWith=Jn,Ie.values=Tr,Ie.valuesIn=function(e){return Rt(e,_r(e))},Ie.where=function(e,t){return nr(e,$t(t))},Ie.without=Zi,Ie.wrap=function(e,t){return t=null==t?Ir:t,gn(t,_,$,[e],[])},Ie.xor=function(){for(var e=-1,t=arguments.length;++en?0:+n||0,r),0<=(n-=t.length)&&e.indexOf(t,n)==n},Ie.escape=function(e){return(e=i(e))&&de.test(e)?e.replace(ce,u):e},Ie.escapeRegExp=function(e){return(e=i(e))&&$e.test(e)?e.replace(be,c):e||"(?:)"},Ie.every=tr,Ie.find=no,Ie.findIndex=Vi,Ie.findKey=No,Ie.findLast=ro,Ie.findLastIndex=zi,Ie.findLastKey=Ro,Ie.findWhere=function(e,t){return no(e,$t(t))},Ie.first=Bn,Ie.floor=ea,Ie.get=function(e,t,n){return e=null==e?$:gt(e,Hn(t),t+""),e===$?n:e},Ie.gt=fr,Ie.gte=function(e,t){return e>=t},Ie.has=function(e,t){if(null==e)return!1;var n=ei.call(e,t);if(!n&&!On(t)){if(t=Hn(t),null==(e=1==t.length?e:gt(e,Mt(t,0,-1))))return!1;t=Wn(t),n=ei.call(e,t)}return n||Rn(e.length)&&Dn(t,e.length)&&(Mo(e)||dr(e))},Ie.identity=Ir,Ie.includes=rr,Ie.indexOf=Yn,Ie.inRange=function(e,t,n){return t=+t||0,n===$?(n=t,t=0):n=+n||0,e>=xi(t,n)&&en?wi(r+n,0):xi(n||0,r-1))+1;else if(n)return i=Ft(e,t,!0)-1,e=e[i],(t===t?t===e:e!==e)?i:-1;if(t!==t)return d(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1},Ie.lt=Cr,Ie.lte=function(e,t){return e<=t},Ie.max=ta,Ie.min=na,Ie.noConflict=function(){return Ye._=ri,this},Ie.noop=jr,Ie.now=ho,Ie.pad=function(e,t,n){e=i(e),t=+t;var r=e.length;return rn?0:+n||0,e.length), e.lastIndexOf(t,n)==n},Ie.sum=function(e,t,n){if(n&&An(e,t,n)&&(t=$),t=$n(t,n,3),1==t.length){e=Mo(e)?e:Ln(e),n=e.length;for(var r=0;n--;)r+=+t(e[n])||0;e=r}else e=Ot(e,t);return e},Ie.template=function(e,t,n){var r=Ie.templateSettings;n&&An(e,t,n)&&(t=n=$),e=i(e),t=Xe(et({},n||t),r,Qe),n=Xe(et({},t.imports),r.imports,Qe);var o,a,s=Lo(n),l=Rt(n,s),u=0;n=t.interpolate||Te;var c="__p+='";n=Wr((t.escape||Te).source+"|"+n.source+"|"+(n===me?Ce:Te).source+"|"+(t.evaluate||Te).source+"|$","g");var d="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(e.replace(n,function(t,n,r,i,s,l){return r||(r=i),c+=e.slice(u,l).replace(De,f),n&&(o=!0,c+="'+__e("+n+")+'"),s&&(a=!0,c+="';"+s+";\n__p+='"),r&&(c+="'+((__t=("+r+"))==null?'':__t)+'"),u=l+t.length,t}),c+="';",(t=t.variable)||(c="with(obj){"+c+"}"),c=(a?c.replace(ae,""):c).replace(se,"$1").replace(le,"$1;"),c="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+c+"return __p}",t=Zo(function(){return Vr(s,d+"return "+c).apply($,l)}),t.source=c,hr(t))throw t;return t},Ie.trim=Or,Ie.trimLeft=function(e,t,n){var r=e;return(e=i(e))?e.slice((n?An(r,t,n):null==t)?g(e):o(e,t+"")):e},Ie.trimRight=function(e,t,n){var r=e;return(e=i(e))?(n?An(r,t,n):null==t)?e.slice(0,v(e)+1):e.slice(0,a(e,t+"")+1):e},Ie.trunc=function(e,t,n){n&&An(e,t,n)&&(t=$);var r=A;if(n=O,null!=t)if(gr(t)){var o="separator"in t?t.separator:o,r="length"in t?+t.length||0:r;n="omission"in t?i(t.omission):n}else r=+t||0;if(e=i(e),r>=e.length)return e;if(1>(r-=n.length))return n;if(t=e.slice(0,r),null==o)return t+n;if($r(o)){if(e.slice(r).search(o)){var a,s=e.slice(0,r);for(o.global||(o=Wr(o.source,(ke.exec(o)||"")+"g")),o.lastIndex=0;e=o.exec(s);)a=e.index;t=t.slice(0,null==a?r:a)}}else e.indexOf(o,r)!=r&&-1<(o=t.lastIndexOf(o))&&(t=t.slice(0,o));return t+n},Ie.unescape=function(e){return(e=i(e))&&fe.test(e)?e.replace(ue,y):e},Ie.uniqueId=function(e){var t=++ti;return i(e)+t},Ie.words=Nr,Ie.all=tr,Ie.any=ar,Ie.contains=rr,Ie.eq=pr,Ie.detect=no,Ie.foldl=co,Ie.foldr=fo,Ie.head=Bn,Ie.include=rr,Ie.inject=co,Fr(Ie,function(){var e={};return pt(Ie,function(t,n){Ie.prototype[n]||(e[n]=t)}),e}(),!1),Ie.sample=or,Ie.prototype.sample=function(e){return this.__chain__||null!=e?this.thru(function(t){return or(t,e)}):or(this.value())},Ie.VERSION=w,Ve("bind bindKey curry curryRight partial partialRight".split(" "),function(e){Ie[e].placeholder=Ie}),Ve(["drop","take"],function(e,t){je.prototype[e]=function(n){var r=this.__filtered__;if(r&&!t)return new je(this);n=null==n?1:wi(vi(n)||0,0);var i=this.clone();return r?i.__takeCount__=xi(i.__takeCount__,n):i.__views__.push({size:n,type:e+(0>i.__dir__?"Right":"")}),i},je.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Ve(["filter","map","takeWhile"],function(e,t){var n=t+1,r=n!=F;je.prototype[e]=function(e,t){var i=this.clone();return i.__iteratees__.push({iteratee:$n(e,t,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),Ve(["first","last"],function(e,t){var n="take"+(t?"Right":"");je.prototype[e]=function(){return this[n](1).value()[0]}}),Ve(["initial","rest"],function(e,t){var n="drop"+(t?"":"Right");je.prototype[e]=function(){return this.__filtered__?new je(this):this[n](1)}}),Ve(["pluck","where"],function(e,t){var n=t?"filter":"map",r=t?$t:Lr;je.prototype[e]=function(e){return this[n](r(e))}}),je.prototype.compact=function(){return this.filter(Ir)},je.prototype.reject=function(e,t){return e=$n(e,t,1),this.filter(function(t){return!e(t)})},je.prototype.slice=function(e,t){e=null==e?0:+e||0;var n=this;return n.__filtered__&&(0t)?new je(n):(0>e?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==$&&(t=+t||0,n=0>t?n.dropRight(-t):n.take(t-e)),n)},je.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},je.prototype.toArray=function(){return this.take(_i)},pt(je.prototype,function(e,t){var n=/^(?:filter|map|reject)|While$/.test(t),r=/^(?:first|last)$/.test(t),i=Ie[r?"take"+("last"==t?"Right":""):t];i&&(Ie.prototype[t]=function(){function t(e){return r&&a?i(e,1)[0]:i.apply($,Ke([e],o))}var o=r?[1]:arguments,a=this.__chain__,s=this.__wrapped__,l=!!this.__actions__.length,u=s instanceof je,c=o[0],f=u||Mo(s);return f&&n&&"function"==typeof c&&1!=c.length&&(u=f=!1),c={func:er,args:[t],thisArg:$},l=u&&!l,r&&!a?l?(s=s.clone(),s.__actions__.push(c),e.call(s)):i.call($,this.value())[0]:!r&&f?(s=l?s:new je(this),s=e.apply(s,o),s.__actions__.push(c),new Fe(s,a)):this.thru(t)})}),Ve("join pop push replace shift sort splice split unshift".split(" "),function(e){var t=(/^(?:replace|split)$/.test(e)?Qr:Zr)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:join|pop|replace|shift)$/.test(e);Ie.prototype[e]=function(){var e=arguments;return r&&!this.__chain__?t.apply(this.value(),e):this[n](function(n){return t.apply(n,e)})}}),pt(je.prototype,function(e,t){var n=Ie[t];if(n){var r=n.name+"";(Oi[r]||(Oi[r]=[])).push({name:t,func:n})}}),Oi[fn($,C).name]=[{name:"wrapper",func:$}],je.prototype.clone=function(){var e=new je(this.__wrapped__);return e.__actions__=qe(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=qe(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=qe(this.__views__),e},je.prototype.reverse=function(){if(this.__filtered__){var e=new je(this);e.__dir__=-1,e.__filtered__=!0}else e=this.clone(),e.__dir__*=-1;return e},je.prototype.value=function(){var e,t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),i=0>n,o=r?t.length:0;e=o;for(var a=this.__views__,s=0,l=-1,u=a.length;++l"'`]/g,fe=RegExp(ue.source),de=RegExp(ce.source),pe=/<%-([\s\S]+?)%>/g,he=/<%([\s\S]+?)%>/g,me=/<%=([\s\S]+?)%>/g,ge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ve=/^\w*$/,ye=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,be=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,$e=RegExp(be.source),we=/[\u0300-\u036f\ufe20-\ufe23]/g,xe=/\\(\\)?/g,Ce=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ke=/\w*$/,Ee=/^0[xX]/,Se=/^\[object .+?Constructor\]$/,_e=/^\d+$/,Me=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Te=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ae=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Oe="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ne={};Ne[J]=Ne[Q]=Ne[X]=Ne[ee]=Ne[te]=Ne[ne]=Ne[re]=Ne[ie]=Ne[oe]=!0,Ne[U]=Ne[H]=Ne[Z]=Ne[q]=Ne[V]=Ne[z]=Ne[B]=Ne["[object Map]"]=Ne[Y]=Ne[W]=Ne[G]=Ne["[object Set]"]=Ne[K]=Ne["[object WeakMap]"]=!1;var Re={};Re[U]=Re[H]=Re[Z]=Re[q]=Re[V]=Re[J]=Re[Q]=Re[X]=Re[ee]=Re[te]=Re[Y]=Re[W]=Re[G]=Re[K]=Re[ne]=Re[re]=Re[ie]=Re[oe]=!0,Re[z]=Re[B]=Re["[object Map]"]=Re["[object Set]"]=Re["[object WeakMap]"]=!1;var Ie={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Pe={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fe={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},je={function:!0,object:!0},Le={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ue={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=je[typeof exports]&&exports&&!exports.nodeType&&exports,qe=je[typeof module]&&module&&!module.nodeType&&module,Ve=je[typeof self]&&self&&self.Object&&self,ze=je[typeof window]&&window&&window.Object&&window,Be=qe&&qe.exports===He&&He,Ye=He&&qe&&"object"==typeof global&&global&&global.Object&&global||ze!==(this&&this.window)&&ze||Ve||this,We=b();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ye._=We,define("common/lodash",[],function(){return We})):He&&qe?Be?(qe.exports=We)._=We:He._=We:Ye._=We}.call(this),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("common/moment",t):e.moment=t()}(this,function(){"use strict";function e(){return Yn.apply(null,arguments)}function t(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function r(e,t){var n,r=[];for(n=0;n0)for(n in Gn)r=Gn[n],i=t[r],f(i)||(e[r]=i);return e}function p(t){d(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),!1===Kn&&(Kn=!0,e.updateOffset(this),Kn=!1)}function h(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function m(e){return 0>e?Math.ceil(e):Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=m(t)),n}function v(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),a=0;for(r=0;i>r;r++)(n&&e[r]!==t[r]||!n&&g(e[r])!==g(t[r]))&&a++;return a+o}function y(){}function b(e){return e?e.toLowerCase().replace("_","-"):e}function $(e){for(var t,n,r,i,o=0;o0;){if(r=w(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&v(i,n,!0)>=t-1)break;t--}o++}return null}function w(e){var t=null;if(!Zn[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Wn._abbr,require("./locale/"+e),x(t)}catch(e){}return Zn[e]}function x(e,t){var n;return e&&(n=f(t)?k(e):C(e,t))&&(Wn=n),Wn._abbr}function C(e,t){return null!==t?(t.abbr=e,Zn[e]=Zn[e]||new y,Zn[e].set(t),x(e),Zn[e]):(delete Zn[e],null)}function k(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Wn;if(!t(e)){if(n=w(e))return n;e=[e]}return $(e)}function E(e,t){var n=e.toLowerCase();Jn[n]=Jn[n+"s"]=Jn[t]=e}function S(e){return"string"==typeof e?Jn[e]||Jn[e.toLowerCase()]:void 0}function _(e){var t,n,r={};for(n in e)i(e,n)&&(t=S(n))&&(r[t]=e[n]);return r}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function T(t,n){return function(r){return null!=r?(A(this,t,r),e.updateOffset(this,n),this):D(this,t)}}function D(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+t](n)}function O(e,t){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=S(e),M(this[e]))return this[e](t);return this}function N(e,t,n){var r=""+Math.abs(e),i=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(tr[e]=i),t&&(tr[t[0]]=function(){return N(i.apply(this,arguments),t[1],t[2])}),n&&(tr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function I(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var t,n,r=e.match(Qn);for(t=0,n=r.length;n>t;t++)tr[r[t]]?r[t]=tr[r[t]]:r[t]=I(r[t]);return function(i){var o="";for(t=0;n>t;t++)o+=r[t]instanceof Function?r[t].call(i,e):r[t];return o}}function F(e,t){return e.isValid()?(t=j(t,e.localeData()),er[t]=er[t]||P(t),er[t](e)):e.localeData().invalidDate()}function j(e,t){function n(e){return t.longDateFormat(e)||e}var r=5;for(Xn.lastIndex=0;r>=0&&Xn.test(e);)e=e.replace(Xn,n),Xn.lastIndex=0,r-=1;return e}function L(e,t,n){br[e]=M(t)?t:function(e,r){return e&&n?n:t}}function U(e,t){return i(br,e)?br[e](t._strict,t._locale):new RegExp(H(e))}function H(e){return q(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,r,i){return t||n||r||i}))}function q(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function V(e,t){var n,r=t;for("string"==typeof e&&(e=[e]),"number"==typeof t&&(r=function(e,n){n[t]=g(e)}),n=0;nr;r++){if(i=a([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function Z(e,t){var n;return e.isValid()?"string"==typeof t&&"number"!=typeof(t=e.localeData().monthsParse(t))?e:(n=Math.min(e.date(),Y(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e):e}function J(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):D(this,"Month")}function Q(){return Y(this.year(),this.month())}function X(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex}function ee(e){return this._monthsParseExact?(i(this,"_monthsRegex")||te.call(this),e?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex}function te(){function e(e,t){return t.length-e.length}var t,n,r=[],i=[],o=[];for(t=0;12>t;t++)n=a([2e3,t]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(r.sort(e),i.sort(e),o.sort(e),t=0;12>t;t++)r[t]=q(r[t]),i[t]=q(i[t]),o[t]=q(o[t]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function ne(e){var t,n=e._a;return n&&-2===l(e).overflow&&(t=n[xr]<0||n[xr]>11?xr:n[Cr]<1||n[Cr]>Y(n[wr],n[xr])?Cr:n[kr]<0||n[kr]>24||24===n[kr]&&(0!==n[Er]||0!==n[Sr]||0!==n[_r])?kr:n[Er]<0||n[Er]>59?Er:n[Sr]<0||n[Sr]>59?Sr:n[_r]<0||n[_r]>999?_r:-1,l(e)._overflowDayOfYear&&(wr>t||t>Cr)&&(t=Cr),l(e)._overflowWeeks&&-1===t&&(t=Mr),l(e)._overflowWeekday&&-1===t&&(t=Tr),l(e).overflow=t),e}function re(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ie(e,t){var n=!0;return o(function(){return n&&(re(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),t.apply(this,arguments)},t)}function oe(e,t){Ir[e]||(re(t),Ir[e]=!0)}function ae(e){var t,n,r,i,o,a,s=e._i,u=Pr.exec(s)||Fr.exec(s);if(u){for(l(e).iso=!0,t=0,n=Lr.length;n>t;t++)if(Lr[t][1].exec(u[1])){i=Lr[t][0],r=!1!==Lr[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=Ur.length;n>t;t++)if(Ur[t][1].exec(u[3])){o=(u[2]||" ")+Ur[t][0];break}if(null==o)return void(e._isValid=!1)}if(!r&&null!=o)return void(e._isValid=!1);if(u[4]){if(!jr.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(o||"")+(a||""),we(e)}else e._isValid=!1}function se(t){var n=Hr.exec(t._i);return null!==n?void(t._d=new Date(+n[1])):(ae(t),void(!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t))))}function le(e,t,n,r,i,o,a){var s=new Date(e,t,n,r,i,o,a);return 100>e&&e>=0&&isFinite(s.getFullYear())&&s.setFullYear(e),s}function ue(e){var t=new Date(Date.UTC.apply(null,arguments));return 100>e&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function ce(e){return fe(e)?366:365}function fe(e){return e%4==0&&e%100!=0||e%400==0}function de(){return fe(this.year())}function pe(e,t,n){var r=7+t-n;return-(7+ue(e,0,r).getUTCDay()-t)%7+r-1}function he(e,t,n,r,i){var o,a,s=(7+n-r)%7,l=pe(e,r,i),u=1+7*(t-1)+s+l;return 0>=u?(o=e-1,a=ce(o)+u):u>ce(e)?(o=e+1,a=u-ce(e)):(o=e,a=u),{year:o,dayOfYear:a}}function me(e,t,n){var r,i,o=pe(e.year(),t,n),a=Math.floor((e.dayOfYear()-o-1)/7)+1;return 1>a?(i=e.year()-1,r=a+ge(i,t,n)):a>ge(e.year(),t,n)?(r=a-ge(e.year(),t,n),i=e.year()+1):(i=e.year(),r=a),{week:r,year:i}}function ge(e,t,n){var r=pe(e,t,n),i=pe(e+1,t,n);return(ce(e)-r+i)/7}function ve(e,t,n){return null!=e?e:null!=t?t:n}function ye(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function be(e){var t,n,r,i,o=[];if(!e._d){for(r=ye(e),e._w&&null==e._a[Cr]&&null==e._a[xr]&&$e(e),e._dayOfYear&&(i=ve(e._a[wr],r[wr]),e._dayOfYear>ce(i)&&(l(e)._overflowDayOfYear=!0),n=ue(i,0,e._dayOfYear),e._a[xr]=n.getUTCMonth(),e._a[Cr]=n.getUTCDate()),t=0;3>t&&null==e._a[t];++t)e._a[t]=o[t]=r[t];for(;7>t;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[kr]&&0===e._a[Er]&&0===e._a[Sr]&&0===e._a[_r]&&(e._nextDay=!0,e._a[kr]=0),e._d=(e._useUTC?ue:le).apply(null,o),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[kr]=24)}}function $e(e){var t,n,r,i,o,a,s,u;t=e._w,null!=t.GG||null!=t.W||null!=t.E?(o=1,a=4,n=ve(t.GG,e._a[wr],me(Te(),1,4).year),r=ve(t.W,1),(1>(i=ve(t.E,1))||i>7)&&(u=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,n=ve(t.gg,e._a[wr],me(Te(),o,a).year),r=ve(t.w,1),null!=t.d?(0>(i=t.d)||i>6)&&(u=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(u=!0)):i=o),1>r||r>ge(n,o,a)?l(e)._overflowWeeks=!0:null!=u?l(e)._overflowWeekday=!0:(s=he(n,r,i,o,a),e._a[wr]=s.year,e._dayOfYear=s.dayOfYear)}function we(t){if(t._f===e.ISO_8601)return void ae(t);t._a=[],l(t).empty=!0;var n,r,i,o,a,s=""+t._i,u=s.length,c=0;for(i=j(t._f,t._locale).match(Qn)||[],n=0;n0&&l(t).unusedInput.push(a),s=s.slice(s.indexOf(r)+r.length),c+=r.length),tr[o]?(r?l(t).empty=!1:l(t).unusedTokens.push(o),B(o,r,t)):t._strict&&!r&&l(t).unusedTokens.push(o);l(t).charsLeftOver=u-c,s.length>0&&l(t).unusedInput.push(s),!0===l(t).bigHour&&t._a[kr]<=12&&t._a[kr]>0&&(l(t).bigHour=void 0),t._a[kr]=xe(t._locale,t._a[kr],t._meridiem),be(t),ne(t)}function xe(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?(r=e.isPM(n),r&&12>t&&(t+=12),r||12!==t||(t=0),t):t}function Ce(e){var t,n,r,i,a;if(0===e._f.length)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ia)&&(r=a,n=t));o(e,n||t)}function ke(e){if(!e._d){var t=_(e._i);e._a=r([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),be(e)}}function Ee(e){var t=new p(ne(Se(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Se(e){var r=e._i,i=e._f;return e._locale=e._locale||k(e._l),null===r||void 0===i&&""===r?c({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),h(r)?new p(ne(r)):(t(i)?Ce(e):i?we(e):n(r)?e._d=r:_e(e),u(e)||(e._d=null),e))}function _e(i){var o=i._i;void 0===o?i._d=new Date(e.now()):n(o)?i._d=new Date(+o):"string"==typeof o?se(i):t(o)?(i._a=r(o.slice(0),function(e){return parseInt(e,10)}),be(i)):"object"==typeof o?ke(i):"number"==typeof o?i._d=new Date(o):e.createFromInputFallback(i)}function Me(e,t,n,r,i){var o={};return"boolean"==typeof n&&(r=n,n=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=i,o._l=n,o._i=e,o._f=t,o._strict=r,Ee(o)}function Te(e,t,n,r){return Me(e,t,n,r,!1)}function De(e,n){var r,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return Te();for(r=n[0],i=1;ie&&(e=-e,n="-"),n+N(~~(e/60),2)+t+N(~~e%60,2)})}function Pe(e,t){var n=(t||"").match(e)||[],r=n[n.length-1]||[],i=(r+"").match(Yr)||["-",0,0],o=60*i[1]+g(i[2]);return"+"===i[0]?o:-o}function Fe(t,r){var i,o;return r._isUTC?(i=r.clone(),o=(h(t)||n(t)?+t:+Te(t))-+i,i._d.setTime(+i._d+o),e.updateOffset(i,!1),i):Te(t).local()}function je(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Le(t,n){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=Pe(gr,t):Math.abs(t)<16&&(t*=60),!this._isUTC&&n&&(r=je(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!n||this._changeInProgress?tt(this,Ze(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:je(this):null!=t?this:NaN}function Ue(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function He(e){return this.utcOffset(0,e)}function qe(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(je(this),"m")),this}function Ve(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Pe(mr,this._i)),this}function ze(e){return!!this.isValid()&&(e=e?Te(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!f(this._isDSTShifted))return this._isDSTShifted;var e={};if(d(e,this),e=Se(e),e._a){var t=e._isUTC?a(e._a):Te(e._a);this._isDSTShifted=this.isValid()&&v(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function Ge(){return!!this.isValid()&&this._isUTC}function Ke(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ze(e,t){var n,r,o,a=e,s=null;return Re(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(a={},t?a[t]=e:a.milliseconds=e):(s=Wr.exec(e))?(n="-"===s[1]?-1:1,a={y:0,d:g(s[Cr])*n,h:g(s[kr])*n,m:g(s[Er])*n,s:g(s[Sr])*n,ms:g(s[_r])*n}):(s=Gr.exec(e))?(n="-"===s[1]?-1:1,a={y:Je(s[2],n),M:Je(s[3],n),d:Je(s[4],n),h:Je(s[5],n),m:Je(s[6],n),s:Je(s[7],n),w:Je(s[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(o=Xe(Te(a.from),Te(a.to)),a={},a.ms=o.milliseconds,a.M=o.months),r=new Ne(a),Re(e)&&i(e,"_locale")&&(r._locale=e._locale),r}function Je(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Qe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Xe(e,t){var n;return e.isValid()&&t.isValid()?(t=Fe(t,e),e.isBefore(t)?n=Qe(e,t):(n=Qe(t,e),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function et(e,t){return function(n,r){var i,o;return null===r||isNaN(+r)||(oe(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period)."),o=n,n=r,r=o),n="string"==typeof n?+n:n,i=Ze(n,r),tt(this,i,e),this}}function tt(t,n,r,i){var o=n._milliseconds,a=n._days,s=n._months;t.isValid()&&(i=null==i||i,o&&t._d.setTime(+t._d+o*r),a&&A(t,"Date",D(t,"Date")+a*r),s&&Z(t,D(t,"Month")+s*r),i&&e.updateOffset(t,a||s))}function nt(e,t){var n=e||Te(),r=Fe(n,this).startOf("day"),i=this.diff(r,"days",!0),o=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",a=t&&(M(t[o])?t[o]():t[o]);return this.format(a||this.localeData().calendar(o,this,Te(n)))}function rt(){return new p(this)}function it(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+this>+n:+n<+this.clone().startOf(t))}function ot(e,t){var n=h(e)?e:Te(e);return!(!this.isValid()||!n.isValid())&&(t=S(f(t)?"millisecond":t),"millisecond"===t?+n>+this:+this.clone().endOf(t)<+n)}function at(e,t,n){return this.isAfter(e,n)&&this.isBefore(t,n)}function st(e,t){var n,r=h(e)?e:Te(e);return!(!this.isValid()||!r.isValid())&&(t=S(t||"millisecond"),"millisecond"===t?+this==+r:(n=+r,+this.clone().startOf(t)<=n&&n<=+this.clone().endOf(t)))}function lt(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function ut(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ct(e,t,n){var r,i,o,a;return this.isValid()?(r=Fe(e,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),t=S(t),"year"===t||"month"===t||"quarter"===t?(a=ft(this,r),"quarter"===t?a/=3:"year"===t&&(a/=12)):(o=this-r,a="second"===t?o/1e3:"minute"===t?o/6e4:"hour"===t?o/36e5:"day"===t?(o-i)/864e5:"week"===t?(o-i)/6048e5:o),n?a:m(a)):NaN):NaN}function ft(e,t){var n,r,i=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(i,"months");return 0>t-o?(n=e.clone().add(i-1,"months"),r=(t-o)/(o-n)):(n=e.clone().add(i+1,"months"),r=(t-o)/(n-o)),-(i+r)}function dt(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pt(){var e=this.clone().utc();return 0o&&(t=o),Lt.call(this,e,t,n,r,i))}function Lt(e,t,n,r,i){var o=he(e,t,n,r,i),a=ue(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()), this.date(a.getUTCDate()),this}function Ut(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Ht(e){return me(e,this._week.dow,this._week.doy).week}function qt(){return this._week.dow}function Vt(){return this._week.doy}function zt(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Bt(e){var t=me(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Yt(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Wt(e,n){return t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]}function Gt(e){return this._weekdaysShort[e.day()]}function Kt(e){return this._weekdaysMin[e.day()]}function Zt(e,t,n){var r,i,o;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Te([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Jt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Yt(e,this.localeData()),this.add(e-t,"d")):t}function Qt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Xt(e){return this.isValid()?null==e?this.day()||7:this.day(this.day()%7?e:e-7):null!=e?this:NaN}function en(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function tn(){return this.hours()%12||12}function nn(e,t){R(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rn(e,t){return t._meridiemParse}function on(e){return"p"===(e+"").toLowerCase().charAt(0)}function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}function sn(e,t){t[_r]=g(1e3*("0."+e))}function ln(){return this._isUTC?"UTC":""}function un(){return this._isUTC?"Coordinated Universal Time":""}function cn(e){return Te(1e3*e)}function fn(){return Te.apply(null,arguments).parseZone()}function dn(e,t,n){var r=this._calendar[e];return M(r)?r.call(t,n):r}function pn(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function hn(){return this._invalidDate}function mn(e){return this._ordinal.replace("%d",e)}function gn(e){return e}function vn(e,t,n,r){var i=this._relativeTime[n];return M(i)?i(e,t,n,r):i.replace(/%d/i,e)}function yn(e,t){var n=this._relativeTime[e>0?"future":"past"];return M(n)?n(t):n.replace(/%s/i,t)}function bn(e){var t,n;for(n in e)t=e[n],M(t)?this[n]=t:this["_"+n]=t;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function $n(e,t,n,r){var i=k(),o=a().set(r,t);return i[n](o,e)}function wn(e,t,n,r,i){if("number"==typeof e&&(t=e,e=void 0),e=e||"",null!=t)return $n(e,t,n,i);var o,a=[];for(o=0;r>o;o++)a[o]=$n(e,o,n,i);return a}function xn(e,t){return wn(e,t,"months",12,"month")}function Cn(e,t){return wn(e,t,"monthsShort",12,"month")}function kn(e,t){return wn(e,t,"weekdays",7,"day")}function En(e,t){return wn(e,t,"weekdaysShort",7,"day")}function Sn(e,t){return wn(e,t,"weekdaysMin",7,"day")}function _n(){var e=this._data;return this._milliseconds=gi(this._milliseconds),this._days=gi(this._days),this._months=gi(this._months),e.milliseconds=gi(e.milliseconds),e.seconds=gi(e.seconds),e.minutes=gi(e.minutes),e.hours=gi(e.hours),e.months=gi(e.months),e.years=gi(e.years),this}function Mn(e,t,n,r){var i=Ze(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Tn(e,t){return Mn(this,e,t,1)}function Dn(e,t){return Mn(this,e,t,-1)}function An(e){return 0>e?Math.floor(e):Math.ceil(e)}function On(){var e,t,n,r,i,o=this._milliseconds,a=this._days,s=this._months,l=this._data;return o>=0&&a>=0&&s>=0||0>=o&&0>=a&&0>=s||(o+=864e5*An(Rn(s)+a),a=0,s=0),l.milliseconds=o%1e3,e=m(o/1e3),l.seconds=e%60,t=m(e/60),l.minutes=t%60,n=m(t/60),l.hours=n%24,a+=m(n/24),i=m(Nn(a)),s+=i,a-=An(Rn(i)),r=m(s/12),s%=12,l.days=a,l.months=s,l.years=r,this}function Nn(e){return 4800*e/146097}function Rn(e){return 146097*e/4800}function In(e){var t,n,r=this._milliseconds;if("month"===(e=S(e))||"year"===e)return t=this._days+r/864e5,n=this._months+Nn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Rn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Pn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12)}function Fn(e){return function(){return this.as(e)}}function jn(e){return e=S(e),this[e+"s"]()}function Ln(e){return function(){return this._data[e]}}function Un(){return m(this.days()/7)}function Hn(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}function qn(e,t,n){var r=Ze(e).abs(),i=Oi(r.as("s")),o=Oi(r.as("m")),a=Oi(r.as("h")),s=Oi(r.as("d")),l=Oi(r.as("M")),u=Oi(r.as("y")),c=i=o&&["m"]||o=a&&["h"]||a=s&&["d"]||s=l&&["M"]||l=u&&["y"]||["yy",u];return c[2]=t,c[3]=+e>0,c[4]=n,Hn.apply(null,c)}function Vn(e,t){return void 0!==Ni[e]&&(void 0===t?Ni[e]:(Ni[e]=t,!0))}function zn(e){var t=this.localeData(),n=qn(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)}function Bn(){var e,t,n,r=Ri(this._milliseconds)/1e3,i=Ri(this._days),o=Ri(this._months);e=m(r/60),t=m(e/60),r%=60,e%=60,n=m(o/12),o%=12;var a=n,s=o,l=i,u=t,c=e,f=r,d=this.asSeconds();return d?(0>d?"-":"")+"P"+(a?a+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||c||f?"T":"")+(u?u+"H":"")+(c?c+"M":"")+(f?f+"S":""):"P0D"}var Yn,Wn,Gn=e.momentProperties=[],Kn=!1,Zn={},Jn={},Qn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Xn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,er={},tr={},nr=/\d/,rr=/\d\d/,ir=/\d{3}/,or=/\d{4}/,ar=/[+-]?\d{6}/,sr=/\d\d?/,lr=/\d\d\d\d?/,ur=/\d\d\d\d\d\d?/,cr=/\d{1,3}/,fr=/\d{1,4}/,dr=/[+-]?\d{1,6}/,pr=/\d+/,hr=/[+-]?\d+/,mr=/Z|[+-]\d\d:?\d\d/gi,gr=/Z|[+-]\d\d(?::?\d\d)?/gi,vr=/[+-]?\d+(\.\d{1,3})?/,yr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,br={},$r={},wr=0,xr=1,Cr=2,kr=3,Er=4,Sr=5,_r=6,Mr=7,Tr=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),R("MMMM",0,0,function(e){return this.localeData().months(this,e)}),E("month","M"),L("M",sr),L("MM",sr,rr),L("MMM",function(e,t){return t.monthsShortRegex(e)}),L("MMMM",function(e,t){return t.monthsRegex(e)}),V(["M","MM"],function(e,t){t[xr]=g(e)-1}),V(["MMM","MMMM"],function(e,t,n,r){var i=n._locale.monthsParse(e,r,n._strict);null!=i?t[xr]=i:l(n).invalidMonth=e});var Dr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Ar="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Nr=yr,Rr=yr,Ir={};e.suppressDeprecationWarnings=!1;var Pr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Fr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/Z|[+-]\d\d(?::?\d\d)?/,Lr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ur=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i;e.createFromInputFallback=ie("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),R("Y",0,0,function(){var e=this.year();return 9999>=e?""+e:"+"+e}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),E("year","y"),L("Y",hr),L("YY",sr,rr),L("YYYY",fr,or),L("YYYYY",dr,ar),L("YYYYYY",dr,ar),V(["YYYYY","YYYYYY"],wr),V("YYYY",function(t,n){n[wr]=2===t.length?e.parseTwoDigitYear(t):g(t)}),V("YY",function(t,n){n[wr]=e.parseTwoDigitYear(t)}),V("Y",function(e,t){t[wr]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var qr=T("FullYear",!1);e.ISO_8601=function(){};var Vr=ie("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?this>e?this:e:c()}),zr=ie("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var e=Te.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),Br=function(){return Date.now?Date.now():+new Date};Ie("Z",":"),Ie("ZZ",""),L("Z",gr),L("ZZ",gr),V(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Pe(gr,e)});var Yr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Wr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Gr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ze.fn=Ne.prototype;var Kr=et(1,"add"),Zr=et(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Jr=ie("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Nt("gggg","weekYear"),Nt("ggggg","weekYear"),Nt("GGGG","isoWeekYear"),Nt("GGGGG","isoWeekYear"),E("weekYear","gg"),E("isoWeekYear","GG"),L("G",hr),L("g",hr),L("GG",sr,rr),L("gg",sr,rr),L("GGGG",fr,or),L("gggg",fr,or),L("GGGGG",dr,ar),L("ggggg",dr,ar),z(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,r){t[r.substr(0,2)]=g(e)}),z(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),E("quarter","Q"),L("Q",nr),V("Q",function(e,t){t[xr]=3*(g(e)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),E("week","w"),E("isoWeek","W"),L("w",sr),L("ww",sr,rr),L("W",sr),L("WW",sr,rr),z(["w","ww","W","WW"],function(e,t,n,r){t[r.substr(0,1)]=g(e)});var Qr={dow:0,doy:6};R("D",["DD",2],"Do","date"),E("date","D"),L("D",sr),L("DD",sr,rr),L("Do",function(e,t){return e?t._ordinalParse:t._ordinalParseLenient}),V(["D","DD"],Cr),V("Do",function(e,t){t[Cr]=g(e.match(sr)[0],10)});var Xr=T("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),R("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),R("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),E("day","d"),E("weekday","e"),E("isoWeekday","E"),L("d",sr),L("e",sr),L("E",sr),L("dd",yr),L("ddd",yr),L("dddd",yr),z(["dd","ddd","dddd"],function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:l(n).invalidWeekday=e}),z(["d","e","E"],function(e,t,n,r){t[r]=g(e)});var ei="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ti="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ni="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),E("dayOfYear","DDD"),L("DDD",cr),L("DDDD",ir),V(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,tn),R("hmm",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)}),R("hmmss",0,0,function(){return""+tn.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),nn("a",!0),nn("A",!1),E("hour","h"),L("a",rn),L("A",rn),L("H",sr),L("h",sr),L("HH",sr,rr),L("hh",sr,rr),L("hmm",lr),L("hmmss",ur),L("Hmm",lr),L("Hmmss",ur),V(["H","HH"],kr),V(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),V(["h","hh"],function(e,t,n){t[kr]=g(e),l(n).bigHour=!0}),V("hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r)),l(n).bigHour=!0}),V("hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i)),l(n).bigHour=!0}),V("Hmm",function(e,t,n){var r=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r))}),V("Hmmss",function(e,t,n){var r=e.length-4,i=e.length-2;t[kr]=g(e.substr(0,r)),t[Er]=g(e.substr(r,2)),t[Sr]=g(e.substr(i))});var ri=/[ap]\.?m?\.?/i,ii=T("Hours",!0);R("m",["mm",2],0,"minute"),E("minute","m"),L("m",sr),L("mm",sr,rr),V(["m","mm"],Er);var oi=T("Minutes",!1);R("s",["ss",2],0,"second"),E("second","s"),L("s",sr),L("ss",sr,rr),V(["s","ss"],Sr);var ai=T("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),E("millisecond","ms"),L("S",cr,nr),L("SS",cr,rr),L("SSS",cr,ir);var si;for(si="SSSS";si.length<=9;si+="S")L(si,pr);for(si="S";si.length<=9;si+="S")V(si,sn);var li=T("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var ui=p.prototype;ui.add=Kr,ui.calendar=nt,ui.clone=rt,ui.diff=ct,ui.endOf=xt,ui.format=ht,ui.from=mt,ui.fromNow=gt,ui.to=vt,ui.toNow=yt,ui.get=O,ui.invalidAt=At,ui.isAfter=it,ui.isBefore=ot,ui.isBetween=at,ui.isSame=st,ui.isSameOrAfter=lt,ui.isSameOrBefore=ut,ui.isValid=Tt,ui.lang=Jr,ui.locale=bt,ui.localeData=$t,ui.max=zr,ui.min=Vr,ui.parsingFlags=Dt,ui.set=O,ui.startOf=wt,ui.subtract=Zr,ui.toArray=St,ui.toObject=_t,ui.toDate=Et,ui.toISOString=pt,ui.toJSON=Mt,ui.toString=dt,ui.unix=kt,ui.valueOf=Ct,ui.creationData=Ot,ui.year=qr,ui.isLeapYear=de,ui.weekYear=Rt,ui.isoWeekYear=It,ui.quarter=ui.quarters=Ut,ui.month=J,ui.daysInMonth=Q,ui.week=ui.weeks=zt,ui.isoWeek=ui.isoWeeks=Bt,ui.weeksInYear=Ft,ui.isoWeeksInYear=Pt,ui.date=Xr,ui.day=ui.days=Jt,ui.weekday=Qt,ui.isoWeekday=Xt,ui.dayOfYear=en,ui.hour=ui.hours=ii,ui.minute=ui.minutes=oi,ui.second=ui.seconds=ai,ui.millisecond=ui.milliseconds=li,ui.utcOffset=Le,ui.utc=He,ui.local=qe,ui.parseZone=Ve,ui.hasAlignedHourOffset=ze,ui.isDST=Be,ui.isDSTShifted=Ye,ui.isLocal=We,ui.isUtcOffset=Ge,ui.isUtc=Ke,ui.isUTC=Ke,ui.zoneAbbr=ln,ui.zoneName=un,ui.dates=ie("dates accessor is deprecated. Use date instead.",Xr),ui.months=ie("months accessor is deprecated. Use month instead",J),ui.years=ie("years accessor is deprecated. Use year instead",qr),ui.zone=ie("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Ue);var ci=ui,fi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},di={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},pi=/\d{1,2}/,hi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},mi=y.prototype;mi._calendar=fi,mi.calendar=dn,mi._longDateFormat=di,mi.longDateFormat=pn,mi._invalidDate="Invalid date",mi.invalidDate=hn,mi._ordinal="%d",mi.ordinal=mn,mi._ordinalParse=pi,mi.preparse=gn,mi.postformat=gn,mi._relativeTime=hi,mi.relativeTime=vn,mi.pastFuture=yn,mi.set=bn,mi.months=W,mi._months=Ar,mi.monthsShort=G,mi._monthsShort=Or,mi.monthsParse=K,mi._monthsRegex=Rr,mi.monthsRegex=ee,mi._monthsShortRegex=Nr,mi.monthsShortRegex=X,mi.week=Ht,mi._week=Qr,mi.firstDayOfYear=Vt,mi.firstDayOfWeek=qt,mi.weekdays=Wt,mi._weekdays=ei,mi.weekdaysMin=Kt,mi._weekdaysMin=ni,mi.weekdaysShort=Gt,mi._weekdaysShort=ti,mi.weekdaysParse=Zt,mi.isPM=on,mi._meridiemParse=ri,mi.meridiem=an,x("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=ie("moment.lang is deprecated. Use moment.locale instead.",x),e.langData=ie("moment.langData is deprecated. Use moment.localeData instead.",k);var gi=Math.abs,vi=Fn("ms"),yi=Fn("s"),bi=Fn("m"),$i=Fn("h"),wi=Fn("d"),xi=Fn("w"),Ci=Fn("M"),ki=Fn("y"),Ei=Ln("milliseconds"),Si=Ln("seconds"),_i=Ln("minutes"),Mi=Ln("hours"),Ti=Ln("days"),Di=Ln("months"),Ai=Ln("years"),Oi=Math.round,Ni={s:45,m:45,h:22,d:26,M:11},Ri=Math.abs,Ii=Ne.prototype;return Ii.abs=_n,Ii.add=Tn,Ii.subtract=Dn,Ii.as=In,Ii.asMilliseconds=vi,Ii.asSeconds=yi,Ii.asMinutes=bi,Ii.asHours=$i,Ii.asDays=wi,Ii.asWeeks=xi,Ii.asMonths=Ci,Ii.asYears=ki,Ii.valueOf=Pn,Ii._bubble=On,Ii.get=jn,Ii.milliseconds=Ei,Ii.seconds=Si,Ii.minutes=_i,Ii.hours=Mi,Ii.days=Ti,Ii.weeks=Un,Ii.months=Di,Ii.years=Ai,Ii.humanize=zn,Ii.toISOString=Bn,Ii.toString=Bn,Ii.toJSON=Bn,Ii.locale=bt,Ii.localeData=$t,Ii.toIsoString=ie("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Bn),Ii.lang=Jr,R("X",0,0,"unix"),R("x",0,0,"valueOf"),L("x",hr),L("X",vr),V("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),V("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.11.1",function(e){Yn=e}(Te),e.fn=ci,e.min=Ae,e.max=Oe,e.now=Br,e.utc=a,e.unix=cn,e.months=xn,e.isDate=n,e.locale=x,e.invalid=c,e.duration=Ze,e.isMoment=h,e.weekdays=kn,e.parseZone=fn,e.localeData=k,e.isDuration=Re,e.monthsShort=Cn,e.weekdaysMin=Sn,e.defineLocale=C,e.weekdaysShort=En,e.normalizeUnits=S,e.relativeTimeThreshold=Vn,e.prototype=ci,e}),define("common/bundles/vendors",["common/require","common/angular","common/angularAnimate","common/angularBootstrap","common/angular-file-upload","common/angularMocks","common/angularResource","common/angularRoute","common/angularXeditable","common/text-angular","common/ui-select","common/d3","common/lodash","common/moment"],function(){}),define("common/modules/apis",["common/angular"],function(e){"use strict";return e.module("common.apis",[])}),define("common/services/api",["common/angular","common/lodash","common/modules/apis"],function(e,t,n){"use strict";n.factory("api",["$cacheFactory","$log","$http","$httpParamSerializer","$q","$timeout",function(n,r,i,o,a,s){function l(e){return e.data.is_error?(r.error(e.data),a.reject(e.data.error_message)):e.data}function u(e){var n={options:{limit:0}};return JSON.stringify(t.merge(n,e||{}))}r.debug("api");return{extend:function(t){return e.extend(Object.create(this),t)},getAll:function(e,n,i,o,s,l,u){return r.debug("api.all"),n=n||{},l=l||"get",a.all([function(){var r=t.assign({},n,s||{},{options:t.assign({},n.options,{sort:o||"id DESC"})});return i&&(r.options.offset=(i.page-1)*i.size,r.options.limit=i.size),this.sendGET(e,l,r,u)}.bind(this)(),function(){if(!i)return a.resolve();var r=t.assign({},n,{return:"id"});return r=t.omit(r,function(e,n){return t.startsWith(n,"api.")}),this.sendGET(e,l,r,u)}.bind(this)()]).then(function(e){var n=e[0],r=i?e[1]:n;return{list:n.values,total:r.count,allIds:t.compact(r.values.map(function(e){return e.id})).join(",")}})},mockGET:function(e,t){var n=a.defer();return s(function(){n.resolve(e)},t||0),n.promise},mockPOST:function(e,t){return this.mockGET.apply(this,arguments)},sendGET:function(e,t,r,a){var s={action:t,entity:e,json:u(r),sequential:1};return!1===a&&n.get("$http").remove("/civicrm/ajax/rest?"+o(s)),i({method:"GET",url:"/civicrm/ajax/rest",cache:!0,responseType:"json",params:s}).then(l)},sendPOST:function(e,t,n){return r.debug("api.sendPOST"),i({method:"POST",url:"/civicrm/ajax/rest",headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"},responseType:"json",data:{json:u(n),sequential:1,entity:e,action:t},transformRequest:o}).then(l)}}}])}),define("common/services/api/appraisal",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.appraisal",["$log","api",function(e,t){return e.debug("api.appraisal"),t.extend({all:function(t,n,r){return e.debug("api.appraisal.api"),this.getAll("Appraisal",t,n,r)},create:function(t){return e.debug("api.appraisal.create"),this.sendPOST("Appraisal","create",t).then(function(e){return e.values[0]})},find:function(t){return e.debug("api.appraisal.find"),this.sendGET("Appraisal","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/services/api/option-group",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.optionGroup",["$log","api",function(t,n){function r(t){return t.values.map(function(t){var n=e.clone(t);return n.option_group_name=n["option_group_id.name"],delete n["option_group_id.name"],n})}function i(t){return e.transform(t,function(e,t){var n=t.option_group_name;e[n]=e[n]||[],e[n].push(t)})}return t.debug("api.optionGroup"),n.extend({valuesOf:function(t,n){var o=e.isArray(t);return this.sendGET("OptionValue","get",{"option_group_id.name":{IN:o?t:[t]},is_active:"1",return:["option_group_id.name","option_group_id","id","name","label","value","weight","is_active","is_reserved"]},n).then(r).then(function(e){return o?i(e):e})}})}])}),define("common/services/api/appraisal-cycle",["common/lodash","common/modules/apis","common/services/api","common/services/api/option-group"],function(e,t){"use strict";t.factory("api.appraisal-cycle",["$q","$log","api","api.optionGroup",function(t,n,r,i){return n.debug("api.appraisal-cycle"),r.extend({all:function(e,t,r){return n.debug("api.appraisal-cycle.all"),this.getAll("AppraisalCycle",e,t,r,{"api.AppraisalCycle.getappraisalsperstep":{}})},create:function(t){return n.debug("api.appraisal-cycle.create"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},find:function(e){n.debug("api.appraisal-cycle.find");var t={id:""+e,"api.AppraisalCycle.getappraisalsperstep":{}};return this.sendGET("AppraisalCycle","get",t,!1).then(function(e){return e.values[0]})},grades:function(){return n.debug("grades"),this.mockGET([{label:1,value:17},{label:2,value:74},{label:3,value:90},{label:4,value:30}])},statuses:function(){return n.debug("api.appraisal-cycle.statuses"),i.valuesOf("appraisal_status")},statusOverview:function(e){return n.debug("api.appraisal-cycle.statusOverview"),this.sendGET("AppraisalCycle","getstatusoverview",e).then(function(e){return e.values})},update:function(t){return n.debug("api.appraisal-cycle.update"),this.sendPOST("AppraisalCycle","create",e.assign(t,{"api.AppraisalCycle.getappraisalsperstep":{}})).then(function(e){return e.values[0]})},total:function(e){return n.debug("api.appraisal-cycle.total"),this.sendGET("AppraisalCycle","getcount",e||{}).then(function(e){return e.result})},types:function(){return n.debug("api.appraisal-cycle.types"),i.valuesOf("appraisal_cycle_type")}})}])}),define("common/services/api/contact-job-role-api.api",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("ContactJobRoleAPI",["$log","api",function(e,t){return e.debug("ContactJobRoleAPI"),t.extend({all:function(t,n,r,i){return e.debug("ContactJobRoleAPI.all()"),this.getAll("ContactHrJobRoles",t,n,r,i)}})}])}),define("common/bundles/apis",["common/services/api/appraisal","common/services/api/appraisal-cycle","common/services/api/contact-job-role-api.api","common/services/api/option-group"],function(){}),define("common/modules/services",["common/angular","common/angular-file-upload"],function(e){"use strict";return e.module("common.services",["angularFileUpload"])}),define("common/services/before-hash-query-params.service",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("beforeHashQueryParams",["$log","$window",function(t,n){function r(e){var t=e||n.location.href,r=o(t);return-1===r.indexOf("?")?{}:i(a(r))}function i(t){return t.length?e.transform(t,function(e,t){var n=t.split("=");n[0]&&(e[n[0]]=n[1]?decodeURI(n[1]):null)},{}):{}}function o(e){var t=e.indexOf("#");return e.substring(0,-1!==t?t:e.length)}function a(e){var t=e.indexOf("?");return e.substr(t+1).split("&")}return t.debug("Service: beforeHashQueryParams"),{parse:r}}])}),function(e){define("common/services/check-permissions",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("checkPermissions",["$q",function(n){return function(r){return r=t.isArray(r)?r:[r],n.resolve(r.every(function(t){return e.checkPerm(t)}))}}])})}(CRM),function(e){define("common/services/crm-ang.service",["common/lodash","common/modules/services"],function(t,n){"use strict";function r(t,n){return e.loadForm(t,n)}n.factory("crmAngService",function(){return{loadForm:r}})})}(CRM),define("common/services/detect-device.service",["common/modules/services"],function(e){"use strict";e.factory("detectDevice",[function(){return{isMobile:function(){return document.getElementsByTagName("body")[0].classList.contains("mobile")}}}])}),define("common/services/dom-event-trigger",["common/modules/services"],function(e){"use strict";!function(t){e.factory("DOMEventTrigger",function(){return function(e,n){t(document).trigger(e,n)}})}(CRM.$)}),define("common/services/file-mime-types",["common/lodash","common/modules/services"],function(e,t){"use strict";t.factory("fileMimeTypes",["$q",function(e){var t={txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf",doc:"msword",docx:"vnd.openxmlformats-officedocument.wordprocessingml.document",xls:"vnd.ms-excel",xlsx:"vnd.openxmlformats-officedocument.spreadsheetml.sheet",ppt:"vnd.ms-powerpoint",pptx:"vnd.openxmlformats-officedocument.presentationml.presentation"};return{getMimeTypeFor:function(n){return e.resolve(t[n])}}}])}),define("common/services/file-upload",["common/modules/services","common/lodash","common/angular-file-upload"],function(e,t){"use strict";e.factory("FileUpload",["$q","$log","FileUploader",function(e,n,r){function i(e){throw new Error(e+" missing from parameter")}function o(e,t,r,i){n.error(" ===== Item Error: "+r+" ======"),n.error(" ===== - item ======"),n.error(e),n.error(" ===== - response ======"),n.error(t),n.error(" ===== - headers ======"),n.error(i)}function a(e){return t.defaults(e,{allowedMimeTypes:{txt:"plain",png:"png",jpeg:"jpeg",bmp:"bmp",gif:"gif",pdf:"pdf"},url:"/civicrm/ajax/attachment",queueLimit:1})}return{uploader:function(n){var s,l,u,c=[];return n?(n=a(n),s=new r({url:n.url,queueLimit:+n.queueLimit,onCompleteItem:function(e,t){c.push(t)},onCompleteAll:function(){u.resolve(c)},onErrorItem:function(e){o.apply(null,arguments),u.reject("Could not upload file: "+e.file.name)},formData:[{entity_table:n.entityTable||i("entityTable"),crm_attachment_token:n.crmAttachmentToken||i("crmAttachmentToken")}],filters:[{name:"fileFormatFilter",fn:function(e){var r=e.type.slice(e.type.lastIndexOf("/")+1);return t.includes(t.values(n.allowedMimeTypes),r)}}]}),s.uploadAll=function(){return l=s.uploadAll,function(n){return u=e.defer(),s.onBeforeUploadItem=function(e){t.each(n,function(n,r){var i={};i[t.snakeCase(r)]=n,e.formData.push(i)})},l.apply(s),u.promise}}(),s):i("custom settings")}}}])}),define("common/services/file.service",["common/modules/services"],function(e){"use strict";e.factory("fileService",["$http","$window","$log",function(e,t,n){return n.debug("Service: fileService"),{openFile:function(n){return e.get(n.url,{responseType:"arraybuffer"}).success(function(e){var r=new Blob([e],{type:n.fileType});t.navigator.msSaveOrOpenBlob?t.navigator.msSaveOrOpenBlob(r,n.name):t.open(URL.createObjectURL(r),"_blank")})}}}])}),define("common/services/hr-settings",["common/modules/services"],function(e){"use strict";e.factory("HR_settings",function(){return{DATE_FORMAT:null}})}),function(e){define("common/services/notification.service",["common/lodash","common/modules/services"],function(t,n){"use strict";n.factory("notificationService",function(){return t(["alert","success","info","error"]).map(function(t){return[t,function(n,r,i){return e.alert(r,n,t,i)}]}).zipObject().value()})})}(CRM),define("common/services/pub-sub",["common/modules/services"],function(e){"use strict";var t=Object.create(null);e.factory("pubSub",["$rootScope",function(e){return{subscribe:function(n,r){var i;return t[n]=t[n]||[],r.$rootScope=e,i=t[n].push(r)-1,{remove:function(){delete t[n][i]}}},publish:function(e,n){t[e]&&(n=void 0!=n?n:{},t[e].forEach(function(e){e.$rootScope.$applyAsync(function(){e(n)})}))}}}])}),define("common/bundles/services",["common/services/before-hash-query-params.service","common/services/check-permissions","common/services/crm-ang.service","common/services/detect-device.service","common/services/dom-event-trigger","common/services/file-mime-types","common/services/file-upload","common/services/file.service","common/services/hr-settings","common/services/notification.service","common/services/pub-sub"],function(){}),define("common/modules/components",["common/angular"],function(e){return e.module("common.components",[])}),define("common/components/heatmap.component",["common/lodash","common/moment","common/modules/components"],function(e,t,n){function r(){function n(e){e.values&&(u(),l(),c())}function r(){return Object.values(d.values).filter(function(e){return!1!==e})}function i(e,t){return e.reduce(function(e,n){return Math.abs(n.value-t)');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend",function(){m("source",!0,0),!l.open&&h()}),t.find("body").on("touchend",function(e){e.target!==g[0]&&(m("source",!1,0),m("tooltip",!1,0))}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,0),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,100)}),u.on("click",function(){m("source",!1,0),m("tooltip",!1,0)}))}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),a||(e.on("mouseenter",function(){m("tooltip",!0,0)}),e.on("mouseleave",function(){m("tooltip",!1,100)})),e.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})})}function m(e,t,r){n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},r)}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("components/notification-badge.html",'\n {{badge.count}}\n\n\n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})}function s(){ -void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;e');r(n,t),e.after(n)}function r(e,n){function r(){n.isOpen=!0,n.$apply()}t.isMobile()||(e.on("click",r),n.$on("$destroy",function(){e.off("click",r)}))}var i=e[0],o=i.compile;return i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o){e.apply(this,arguments),n(i,t),r(i,t)}},e}]}),define("common/decorators/uib-datepicker-mobile-version.decorator",["common/moment","common/services/detect-device.service"],function(e){"use strict";return["$delegate","detectDevice",function(t,n){function r(t){return t?e(t).format("Y-MM-DD"):""}var i=t[0],o=i.compile;return i.require=["ngModel","uibDatepickerPopup"],i.compile=function(){var e=o.apply(this,arguments);return function(t,i,o,a){n.isMobile()?(i.prop("type","date"),o.ngReadonly=!1,a[0].$formatters.push(function(e){return r(e)}),t.$watch("datepickerOptions.minDate",function(e){o.$set("min",r(e))}),t.$watch("datepickerOptions.maxDate",function(e){o.$set("max",r(e))})):e.apply(this,arguments)}},t}]}),define("common/decorators/xeditable-disable-calendar-icon.decorator",[],function(){"use strict";return["$delegate",function(e){var t=e[0],n=t.compile;return t.compile=function(){var e=n.apply(this,arguments);return function(t,n,r){e.apply(this,arguments),r.eShowCalendarButton=!1}},e}]}),define("common/decorators/ui-bootstrap/uib-tabset",[],function(){"use strict";return["$delegate",function(e){return e[0].bindToController.customHeaderClass="@",e}]}),define("common/decorators/ui-bootstrap/uib-modal.decorator",["common/angular"],function(e){"use strict";return["$delegate","$document",function(e,t){function n(){var e,n=t.find("body, html");return n.addClass("chr_scroll-lock"),e=r.apply(this,arguments),e.closed.then(function(){t.find(".modal-dialog").length||n.removeClass("chr_scroll-lock")}),e}var r=e.open;return e.open=n,e}]}),define("common/decorators/uib-tooltip.decorator",["common/angular","common/angularBootstrap"],function(e){"use strict";var t,n;return["$delegate","$document","$timeout",function(r,i,o){return t=i,n=o,function(){var i=r.apply(this,arguments),o=i.compile,a="ontouchstart"in t[0].documentElement,s=a?"touchend touchcancel":"click";return i.compile=function(r,i){return function(l,u,c,f){function d(){g=e.element('
    '),u.css({position:"relative"}),g.css({position:"absolute",height:"100%",width:"100%","z-index":1,top:0,left:0}),u.append(g)}function p(){a?(g.on("touchend touchcancel",function(){m("source",!0,50),!l.open&&h()}),t.find("body").on("touchend touchcancel",function(e){e.target!==g[0]&&(m("source",!1,0),m("tooltip",!1,0))}),g.on("click",function(e){e.stopPropagation()})):(u.on("mouseenter",function(){m("source",!0,0),!l.open&&h()}),u.on("mouseleave",function(){m("source",!1,100)}),u.on("click",function(){m("source",!1,0),m("tooltip",!1,0)}))}function h(){var e;n(function(){e=t.find(".tooltip-clickable-template:visible:last"),a||(e.on("mouseenter",function(){m("tooltip",!0,0)}),e.on("mouseleave",function(){m("tooltip",!1,100)})),e.on(s,function(){m("source",!1,0),m("tooltip",!1,0)})})}function m(e,t,r){n(function(){l[e+"_hovered"]=t,l.open=l.source_hovered||l.tooltip_hovered,u.trigger("custom"+(l.open?"Show":"Hide")),a&&g[l.open?"hide":"show"]()},r)}var g,v=u.attr("uib-tooltip-clickable");v&&function(){c.tooltipTrigger="customShow",c.tooltipAnimation=!1}(),o(r,i)(l,u,c,f),v&&function(){a&&d(),p()}()}},i}}]}),define("common/modules/templates",["common/angular"],function(e){"use strict";return e.module("common.templates",[]).run(["$templateCache",function(e){e.put("dialog.html",'\n\n\n'),e.put("help-text.html",'\n'),e.put("loading.html",'
    \n
    \n
    \n
    \n'),e.put("time-amount-picker.html",'
    \n
    \n \n \n
    \n h\n
    \n \n \n
    \n m\n
    \n'),e.put("timepicker-select.html",'\n\n'),e.put("civihr-ui-select/choices.tpl.html",'
      \n
    • \n
      \n
        \n
      • \n
        \n
      • \n
      \n
    • \n
    \n'),e.put("civihr-ui-select/match-multiple.tpl.html",'\n
  • \n \n \n
  • \n
    \n'),e.put("civihr-ui-select/match.tpl.html",'\n {{$select.contactList ? \'-select-\' : $select.placeholder}}\n \n \n \n\n'),e.put("civihr-ui-select/select-contacts-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n\n \n\n \n
    \n
    \n'),e.put("civihr-ui-select/select-contacts.tpl.html",'
    \n
    \n \n
    \n'),e.put("civihr-ui-select/select-multiple.tpl.html",'
    \n
    \n
      \n \n
    • \n \n
    • \n
    \n \n
    \n
    \n'),e.put("civihr-ui-select/select.tpl.html",'
    \n
    \n \n
    \n'),e.put("components/heatmap.html",'
      \n
    • \n {{day.name.short}}\n
    • \n
    \n'),e.put("components/notification-badge.html",'\n {{badge.count}}\n\n\n'),e.put("contact-actions/contact-actions.html",'
    \n \n \n
    \n'),e.put("contact-actions/modals/form.html",'
    \n \n \n \n
    \n')}])}),define("common/modules/controllers",["common/angular","common/angularBootstrap","common/modules/apis"],function(e){"use strict";return e.module("common.controllers",["ui.bootstrap","common.apis"])}),define("common/modules/directives",["common/angular","common/decorators/ui-select-focus.decorator","common/decorators/uib-datepicker-calendar-icon.decorator","common/decorators/uib-datepicker-mobile-version.decorator","common/decorators/xeditable-disable-calendar-icon.decorator","common/decorators/ui-bootstrap/uib-tabset","common/decorators/ui-bootstrap/uib-modal.decorator","common/decorators/uib-tooltip.decorator","common/angularBootstrap","common/angularXeditable","common/ui-select","common/modules/templates","common/modules/controllers","common/modules/services","common/modules/apis"],function(e,t,n,r,i,o,a,s){"use strict";return e.module("common.directives",["common.templates","common.controllers","ui.select","ui.bootstrap","xeditable"]).config(["$provide","$uibTooltipProvider",function(e,l){l.setTriggers({customShow:"customHide"}),e.decorator("uibDatepickerPopupDirective",r),e.decorator("uibDatepickerPopupDirective",n),e.decorator("uibTabsetDirective",o),e.decorator("$uibModal",a),e.decorator("editableBsdateDirective",i),e.decorator("uiSelectDirective",t),e.decorator("$uibTooltip",s)}]).run(["$templateCache",function(e){var t="uib/template/tabs/tabset.html",n=jQuery(e.get(t));n.find("ul").addClass("{{tabset.customHeaderClass}}"),e.put(t,n.wrap("
    ").parent().html())}])}),define("common/services/api/contact-actions",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contactActions",["$q","api",function(e,t){function n(e,n){return t.sendGET(e,"getoptions",{field:n,context:"search"}).then(function(e){return e.values})}function r(e){return t.sendGET("UFField","get",{uf_group_id:e,is_active:!0}).then(function(e){return e.values})}function i(n,r){return e(function(e,i){if(r.contact_type=n,r.email)return t.sendGET("CustomField","get",{return:["id"],custom_group_id:"Emergency_Contacts",name:"email"}).then(function(t){r["custom_"+t.id]=r.email,delete r.email,e()});e()}).then(function(){return t.sendPOST("Contact","create",r).then(function(e){return e.values[0]})})}return t.extend({getOptions:{forContactType:function(){return n.call(this,"Contact","contact_type")},forGroup:function(){return n.call(this,"GroupContact","group_id")},forTag:function(){return n.call(this,"EntityTag","tag_id")},forStateProvince:function(){return n.call(this,"Address","state_province_id")},forCountry:function(){return n.call(this,"Address","country_id")},forGender:function(){return n.call(this,"Contact","gender_id")},forDeceased:function(){return n.call(this,"Contact","is_deceased")}},save:{newIndividual:function(e){return i.call(this,"Individual",e)},newOrganization:function(e){return i.call(this,"Organization",e)},newHousehold:function(e){return i.call(this,"Household",e)}},getFormFields:{forNewIndividual:function(){return r.call(this,"new_individual")},forNewOrganization:function(){return r.call(this,"new_organization")},forNewHousehold:function(){return r.call(this,"new_household")}}})}])}),define("common/controllers/contact-actions/modal-ctrl",[],function(){"use strict";return function(e,t){this.errorMsg="",this.loading=!0,this.formFields=[],this.init=function(e){e().then(function(e){this.loading=!1,this.formFields=e}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while loading form fields"}.bind(this))},this.cancel=function(){t.dismiss("cancel")},this.save=function(n,r){this.loading=!0,n(this.formFields.reduce(function(e,t){return e[t.field_name]=t.value,e},{})).then(function(n){this.loading=!1,e.$broadcast(r,n),t.dismiss("cancel")}.bind(this)).catch(function(){this.loading=!1,this.errorMsg="Error while saving data"}.bind(this))}}}),define("common/controllers/contact-actions/new-individual-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Individual",i.init(r.getFormFields.forNewIndividual),i.submit=function(){i.save(r.save.newIndividual,"newIndividualCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewIndividualModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-household-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Household",i.init(r.getFormFields.forNewHousehold),i.submit=function(){i.save(r.save.newHousehold,"newHouseholdCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewHouseholdModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/new-organization-ctrl",["common/modules/controllers","common/controllers/contact-actions/modal-ctrl","common/services/api/contact-actions"],function(e,t){"use strict";function n(e,n,r){var i=this;t.call(i,e,n),i.title="New Organization",i.init(r.getFormFields.forNewOrganization),i.submit=function(){i.save(r.save.newOrganization,"newOrganizationCreated")}}n.prototype=Object.create(t.prototype),n.prototype.constructor=n,e.controller("NewOrganizationModalCtrl",["$rootScope","$uibModalInstance","api.contactActions",n])}),define("common/controllers/contact-actions/contact-actions-ctrl",["common/modules/controllers","common/services/api/contact-actions","common/controllers/contact-actions/new-individual-ctrl","common/controllers/contact-actions/new-household-ctrl","common/controllers/contact-actions/new-organization-ctrl"],function(e){"use strict";e.controller("ContactActionsCtrl",["$scope","$rootElement","$uibModal","api.contactActions",function(e,t,n,r){var i=this;e.$watch(function(){return i.refineSearch.selected},function(t,n){t!==n&&e.$emit("contactRefineSearch",{field:t.field?t.field.label:null,option:t.option?t.option.value:null})},!0),i.refineSearch={selected:{field:null,option:null},availableFields:[{label:"Contact Type",getOptions:r.getOptions.forContactType},{label:"Group",getOptions:r.getOptions.forGroup},{label:"Tag",getOptions:r.getOptions.forTag},{label:"State / Province",getOptions:r.getOptions.forStateProvince},{label:"Country",getOptions:r.getOptions.forCountry},{label:"Gender",getOptions:r.getOptions.forGender},{label:"Deceased",getOptions:r.getOptions.forDeceased}],availableOptions:{refresh:function(){i.refineSearch.selected.field?(this.options=null,i.refineSearch.selected.field.getOptions().then(function(e){this.options=e}.bind(this))):this.options=[]},options:[]}},i.showNewIndividualModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewIndividualModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewHouseholdModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewHouseholdModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})},i.showNewOrganizationModal=function(){n.open({appendTo:t.children().eq(0),controller:"NewOrganizationModalCtrl",controllerAs:"$ctrl",bindToController:!0,templateUrl:"contact-actions/modals/form.html"})}}])}),define("common/directives/prevent-animations",["common/modules/directives"],function(e){"use strict";e.directive("preventAnimations",["$animate",function(e){return{restrict:"A",link:function(t,n,r){e.enabled(n,!1)}}}])}),define("common/directives/loading",["common/modules/directives","common/directives/prevent-animations"],function(e){"use strict";e.directive("crmLoading",["$templateCache",function(e){return{scope:{show:"="},restrict:"E",replace:!0,transclude:!0,template:e.get("loading.html")}}])}),define("common/directives/contact-actions/contact-actions",["common/modules/directives","common/controllers/contact-actions/contact-actions-ctrl","common/directives/loading"],function(e){"use strict";e.directive("contactActions",[function(){return{restrict:"E",templateUrl:"contact-actions/contact-actions.html",controller:"ContactActionsCtrl",controllerAs:"$ctrl",link:function(e,t,n){e.$ctrl.refineSearchVisible=t.parent().parent()[0].hasAttribute("refine-search")}}}])}),define("common/directives/help-text.directive",["common/lodash","common/moment","common/modules/directives","common/services/notification.service"],function(e,t,n){function r(e,t){function n(){var n=e.getHelpText();t.info(e.title||r,n)}var r="Help";this.displayHelpText=n}function i(e,t,n){function r(){return t.find(".help-text").html()}e.getHelpText=r}n.directive("helpText",["$templateCache",function(e){return{restrict:"E",scope:{title:"@?"},transclude:!0,controller:r,controllerAs:"helpText",template:e.get("help-text.html"),link:i}}]),r.$inject=["$scope","notificationService"]}),define("common/directives/scroll-shadows.directive",["common/angular","common/modules/directives"],function(e,t){"use strict";function n(t,n,r){function i(){u(),a(),l(),s()}function o(){var e=f.width(),t=p+"__shadows--show-left",n=p+"__shadows--show-right",r=d.scrollLeft(),i=d.width();if(e<=i)return void d.removeClass(t+" "+n);d[r>0?"addClass":"removeClass"](t),d[r
    ').parent(),d=f.wrap('
    ').parent(),d.wrap('
    ')}var f,d,p="chr_scroll-shadows";!function(){c(),i(),o()}()}t.directive("scrollShadows",[function(){return{restrict:"A",controller:n}}]),n.$inject=["$element","$scope","$window"]}),define("common/directives/timepicker-select.directive",["common/moment","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var n=+t.timepickerSelectInterval||1,i=e.duration(t.timepickerSelectTimeFrom||"00:00"),o=e.duration(t.timepickerSelectTimeTo||"23:59");for(r.options=[];i.asMinutes()<=o.asMinutes();){var a=e.utc(i.asMilliseconds());r.options.push(a.format("HH:mm")),i.add(n,"minutes")}}var r=this;r.placeholder=t.timepickerSelectPlaceholder,r.options=[],t.$watchGroup(["timepickerSelectTimeFrom","timepickerSelectTimeTo","timepickerSelectInterval"],function(){n()})}t.directive("timepickerSelect",["$templateCache",function(e){return{scope:{timepickerSelectPlaceholder:"@",timepickerSelectTimeFrom:"<",timepickerSelectTimeTo:"<",timepickerSelectInterval:"<"},restrict:"A",controllerAs:"selector",controller:["$scope",n],template:e.get("timepicker-select.html")}}]),n.$inject=["$scope"]}),define("common/directives/time-amount-picker.directive",["common/lodash","common/modules/directives"],function(e,t){"use strict";function n(t){function n(){var e=Math.floor(c);for(d.hoursOptions=[];e<=f;)d.hoursOptions.push(e),e++}function r(){var e,t,n,r=0;for(d.minutesOptions=[];r<60;)t=+d.selectedHours===Math.floor(c)&&rf%1*60,e=t||n,!e&&d.minutesOptions.push(r),r+=u;l()}function i(){u=+t.interval||1,c=isNaN(+t.minAmount)?0:+t.minAmount,f=isNaN(+t.maxAmount)?24:+t.maxAmount,n(),r()}function o(){""!==d.selectedHours&&""!==d.selectedMinutes&&(t.value=+d.selectedHours+d.selectedMinutes/60)}function a(){t.$watch("disabled",function(e){d.disabled=e}),t.$watch("value",function(){s(),i()}),t.$watchGroup(["minAmount","maxAmount","interval"],function(){i()})} +function s(){void 0!==t.value&&(d.selectedHours=""+Math.floor(t.value),d.selectedMinutes=""+Math.floor(t.value%1*60)),o()}function l(){d.selectedMinutese.last(d.minutesOptions)&&(d.selectedMinutes=""+e.last(d.minutesOptions))}var u,c,f,d=this;d.hoursOptions=[],d.minutesOptions=[],d.selectedHours="",d.selectedMinutes="",d.buildMinutesOptions=r,d.calculateSelectedValue=o,function(){s(),i(),a()}()}t.directive("timeAmountPicker",["$templateCache",function(e){return{scope:{minAmount:".75?Math.floor(.25*Math.ceil(e/.25))+"h":"",n=e%1&&e%1<=.75&&e%1>0?.25*Math.ceil(e%1/.25)*60+"m":"",r+t+(t&&n?" ":"")+n)}};return function(t,n){var r=void 0===t?0:parseFloat(t);if(isNaN(r))throw new Error("Value must be a number or a numeric string: "+t);return e[n](r)}})}),define("common/bundles/filters",["common/filters/time-unit-applier.filter"],function(){}),define("common/decorators/angular-date/datepicker-popup",["common/lodash"],function(e){return["$delegate","HR_settings",function(t,n){"use strict";var r=t[0].link;return t[0].compile=function(){return function(t,i,o,a){o.uibDatepickerPopup=o.uibDatepickerPopup||n.DATE_FORMAT||"yyyy-MM-dd",o.showButtonBar=o.showButtonBar||!1,t.datepickerOptions=e.assign({formatDayHeader:"E",showWeeks:!1,startingDay:1},t.datepickerOptions),r.apply(this,arguments)}},t}]}),define("common/decorators/angular-date/date-filter",[],function(){"use strict";return["$delegate",function(e){var t=e;return function(){if("E"===arguments[1]){var e=Array.prototype.slice.call(arguments);return e[1]="EEE",t.apply(this,e)[0]}return t.apply(this,arguments)}}]}),function(e){define("common/modules/angular-date",["common/angular","common/decorators/angular-date/datepicker-popup","common/decorators/angular-date/date-filter","common/modules/services","common/angularBootstrap","common/modules/templates"],function(t,n,r){"use strict";function i(t){var n="uib/template/datepicker/"+t+".html",r=o.get(n);r=r.replace(/glyphicon glyphicon-chevron-(left|right)/gm,"fa fa-chevron-$1"),"day"===t&&(r=function(t){return e(t).find('th[ng-if="showWeeks"]').parent().css({"border-top":"1px solid #DDD"}),e(t).prop("outerHTML")}(e.parseHTML(r))),o.put(n,r)}var o;return t.module("common.angularDate",["common.services","ui.bootstrap","common.templates"]).config(["$provide",function(e){e.decorator("uibDatepickerPopupDirective",n),e.decorator("dateFilter",r)}]).run(["$templateCache",function(e){o=e,["day","month","year"].forEach(i)}])})}(CRM.$),define("common/services/angular-date/date-format",["common/angular","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.factory("DateFormat",["$q","HR_settings",function(e,t){return{dateFormat:null,getDateFormat:function(){return this.dateFormat?e.when(this.dateFormat):e.when("dd/MM/yyyy").catch(function(){return"yyyy-MM-dd"}).then(function(e){return t.DATE_FORMAT=e,this.dateFormat=e,e}.bind(this))}}}])}),define("common/filters/angular-date/format-date",["common/moment","common/modules/angular-date","common/services/hr-settings"],function(e,t){"use strict";t.filter("formatDate",["HR_settings",function(t){var n=["DD-MM-YYYY","DD-MM-YYYY HH:mm:ss","YYYY-MM-DD","YYYY-MM-DD HH:mm:ss","DD/MM/YYYY","x","YYYY-MM-DD HH:mm:ss"];return function(r,i,o){var a,s=i||t.DATE_FORMAT||"YYYY-MM-DD",l=e(0);return r instanceof Date&&(r=e(r).format("YYYY-MM-DD HH:mm:ss")),a=e(r,n,!0),a.isValid()&&!a.isSame(l)?i===Date?a.toDate():a.format(s.toUpperCase())+("hours"===o?" "+a.format("HH:mm"):""):"Unspecified"}}])}),define("common/directives/angular-date/date-input",["common/modules/angular-date","common/filters/angular-date/format-date"],function(e){"use strict";e.directive("dateInput",["$filter",function(e){return{require:"ngModel",link:function(t,n,r,i){function o(t){var n=e("formatDate")(t);return n="Unspecified"==n?"":n}i.$formatters.push(o),i.$parsers=[]}}}])}),define("common/bundles/angular-date",["common/services/angular-date/date-format","common/filters/angular-date/format-date","common/directives/angular-date/date-input"],function(){}),define("common/modules/routers/compu-ng-route",["common/angular","common/angularRoute"],function(e){"use strict";return e.module("compuNgRoute",["ngRoute"]).config(["$routeProvider",function(t){var n=t.when;t.resolveForAll=function(e){return t.commonResolve=e,t},t.when=function(r,i){return e.extend(i.resolve||{},t.commonResolve||{}),n.call(t,r,i)}}])}),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function r(e,t){return L(new(L(function(){},{prototype:e})),t)}function i(e){return j(arguments,function(t){t!==e&&j(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var r in e.path){if(e.path[r]!==t.path[r])break;n.push(e.path[r])}return n}function a(e){if(Object.keys)return Object.keys(e);var t=[];return j(e,function(e,n){t.push(n)}),t}function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,r=Number(arguments[2])||0;for(0>(r=0>r?Math.ceil(r):Math.floor(r))&&(r+=n);n>r;r++)if(r in e&&e[r]===t)return r;return-1}function l(e,t,n,r){var i,l=o(n,r),u={},c=[];for(var f in l)if(l[f].params&&(i=a(l[f].params),i.length))for(var d in i)s(c,i[d])>=0||(c.push(i[d]),u[i[d]]=e[i[d]]);return L({},u,t)}function u(e,t,n){if(!n){n=[];for(var r in e)n.push(r)}for(var i=0;i "));if(y[n]=r,I(e))g.push(n,[function(){return t.get(e)}],u);else{var i=t.annotate(e);j(i,function(e){e!==n&&l.hasOwnProperty(e)&&p(l[e],e)}),g.push(n,e,i)}v.pop(),y[n]=o}}function h(e){return P(e)&&e.then&&e.$$promises}if(!P(l))throw new Error("'invocables' must be an object");var m=a(l||{}),g=[],v=[],y={};return j(l,p),l=v=y=null,function(r,o,a){function s(){--b||($||i(y,o.$$values),p.$$values=y,p.$$promises=p.$$promises||!0,delete p.$$inheritedValues,u.resolve(y))}function l(e){p.$$failure=e,u.reject(e)}if(h(r)&&a===n&&(a=o,o=r,r=null),r){if(!P(r))throw new Error("'locals' must be an object")}else r=c;if(o){if(!h(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=f;var u=e.defer(),p=u.promise,v=p.$$promises={},y=L({},r),b=1+g.length/3,$=!1;if(N(o.$$failure))return l(o.$$failure),p;o.$$inheritedValues&&i(y,d(o.$$inheritedValues,m)),L(v,o.$$promises),o.$$values?($=i(y,d(o.$$values,m)),p.$$inheritedValues=d(o.$$values,m),s()):(o.$$inheritedValues&&(p.$$inheritedValues=d(o.$$inheritedValues,m)),o.then(s,l));for(var w=0,x=g.length;x>w;w+=3)r.hasOwnProperty(g[w])?s():function(n,i,o){function u(e){f.reject(e),l(e)}function c(){if(!N(p.$$failure))try{f.resolve(t.invoke(i,a,y)),f.promise.then(function(e){y[n]=e,s()},u)}catch(e){u(e)}}var f=e.defer(),d=0;j(o,function(e){v.hasOwnProperty(e)&&!r.hasOwnProperty(e)&&(d++,v[e].then(function(t){y[e]=t,--d||c()},u))}),d||c(),v[n]=f.promise}(g[w],g[w+1],g[w+2]);return p}},this.resolve=function(e,t,n,r){return this.study(e)(t,n,r)}}function g(e,t,n){this.fromConfig=function(e,t,n){return N(e.template)?this.fromString(e.template,t):N(e.templateUrl)?this.fromUrl(e.templateUrl,t):N(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return R(e)?e(t):e},this.fromUrl=function(n,r){return R(n)&&(n=n(r)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,r){return n.invoke(e,null,r||{params:t})}}function v(e,t,i){function o(t,n,r,i){if(g.push(t),h[t])return h[t];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(m[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return m[t]=new H.Param(t,n,r,i),m[t]}function a(e,t,n,r){var i=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:i=["(",")"+(r?"?":"")];break;case!0:i=["?(",")?"];break;default:i=["("+n+"|",")?"]}return o+i[0]+t+i[1]}function s(i,o){var a,s,l,u,c;return a=i[2]||i[3],c=t.params[a],l=e.substring(d,i.index),s=o?i[4]:i[4]||("*"==i[1]?".*":null),u=H.type(s||"string")||r(H.type("string"),{pattern:new RegExp(s,t.caseInsensitive?"i":n)}),{id:a,regexp:s,segment:l,type:u,cfg:c}}t=L({params:{}},P(t)?t:{});var l,u=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,c=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f="^",d=0,p=this.segments=[],h=i?i.params:{},m=this.params=i?i.params.$$new():new H.ParamSet,g=[];this.source=e;for(var v,y,b;(l=u.exec(e))&&(v=s(l,!1),!(v.segment.indexOf("?")>=0));)y=o(v.id,v.type,v.cfg,"path"),f+=a(v.segment,y.type.pattern.source,y.squash,y.isOptional),p.push(v.segment),d=u.lastIndex;b=e.substring(d);var $=b.indexOf("?");if($>=0){var w=this.sourceSearch=b.substring($);if(b=b.substring(0,$),this.sourcePath=e.substring(0,d+$),w.length>0)for(d=0;l=c.exec(w);)v=s(l,!0),y=o(v.id,v.type,v.cfg,"search"),d=u.lastIndex}else this.sourcePath=e,this.sourceSearch="";f+=a(b)+(!1===t.strict?"/?":"")+"$",p.push(b),this.regexp=new RegExp(f,t.caseInsensitive?"i":n),this.prefix=p[0],this.$$paramNames=g}function y(e){L(this,e)}function b(){function e(e){return null!=e?e.toString().replace(/\//g,"%2F"):e}function i(e){return null!=e?e.toString().replace(/%2F/g,"/"):e}function o(){return{strict:m,caseInsensitive:d}}function l(e){return R(e)||F(e)&&R(e[e.length-1])}function u(){for(;x.length;){var e=x.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend($[e.name],f.invoke(e.def))}}function c(e){L(this,e||{})}H=this;var f,d=!1,m=!0,g=!1,$={},w=!0,x=[],C={string:{encode:e,decode:i,is:function(e){return null==e||!N(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return N(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};b.$$getDefaultValue=function(e){if(!l(e.value))return e.value;if(!f)throw new Error("Injectable functions cannot be called at configuration time");return f.invoke(e.value)},this.caseInsensitive=function(e){return N(e)&&(d=e),d},this.strictMode=function(e){return N(e)&&(m=e),m},this.defaultSquashPolicy=function(e){if(!N(e))return g;if(!0!==e&&!1!==e&&!I(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return g=e,e},this.compile=function(e,t){return new v(e,L(o(),t))},this.isMatcher=function(e){if(!P(e))return!1;var t=!0;return j(v.prototype,function(n,r){R(n)&&(t=t&&N(e[r])&&R(e[r]))}),t},this.type=function(e,t,n){if(!N(t))return $[e];if($.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return $[e]=new y(L({name:e},t)),n&&(x.push({name:e,def:n}),w||u()),this},j(C,function(e,t){$[t]=new y(L({name:t},e))}),$=r($,{}),this.$get=["$injector",function(e){return f=e,w=!1,u(),j(C,function(e,t){$[t]||($[t]=new y(e))}),this}],this.Param=function(e,t,r,i){function o(){if(!f)throw new Error("Injectable functions cannot be called at configuration time");var e=f.invoke(r.$$fn);if(null!==e&&e!==n&&!d.type.is(e))throw new Error("Default value ("+e+") for parameter '"+d.id+"' is not an instance of Type ("+d.type.name+")");return e}function u(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=h(p(d.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),N(e)?d.type.$normalize(e):o()}function c(){return"{Param:"+e+" "+t+" squash: '"+b+"' optional: "+v+"}"}var d=this;r=function(e){var t=P(e)?a(e):[];return-1===s(t,"value")&&-1===s(t,"type")&&-1===s(t,"squash")&&-1===s(t,"array")&&(e={value:e}),e.$$fn=l(e.value)?e.value:function(){return e.value},e}(r),t=function(t,n,r){if(t.type&&n)throw new Error("Param '"+e+"' has two type configurations.");return n||(t.type?t.type instanceof y?t.type:new y(t.type):"config"===r?$.any:$.string)}(r,t,i);var m=function(){var t={array:"search"===i&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return L(t,n,r).array}();t=m?t.$asArray(m,"search"===i):t,"string"!==t.name||m||"path"!==i||r.value!==n||(r.value="");var v=r.value!==n,b=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!N(n)||null==n)return g;if(!0===n||I(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,v),w=function(e,t,r,i){var o,a,l=[{from:"",to:r||t?n:""},{from:null,to:r||t?n:""}];return o=F(e.replace)?e.replace:[],I(i)&&o.push({from:i,to:n}),a=h(o,function(e){return e.from}),p(l,function(e){return-1===s(a,e.from)}).concat(o)}(r,m,v,b);L(this,{id:e,type:t,location:i,array:m,squash:b,replace:w,isOptional:v,value:u,dynamic:n,config:r,toString:c})},c.prototype={$$new:function(){return r(this,L(new c,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,r=a(c.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),j(t,function(t){j(a(t),function(t){-1===s(e,t)&&-1===s(r,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return j(n.$$keys(),function(r){t[r]=n[r].value(e&&e[r])}),t},$$equals:function(e,t){var n=!0,r=this;return j(r.$$keys(),function(i){var o=e&&e[i],a=t&&t[i];r[i].type.equals(o,a)||(n=!1)}),n},$$validates:function(e){var r,i,o,a,s,l=this.$$keys();for(r=0;ri;i++)if(t(u[i]))return;c&&t(c)}}function p(){return l=l||i.$on("$locationChangeSuccess",d)}var h,m=a.baseHref(),g=r.url();return f||p(),{sync:function(){d()},listen:function(){return p()},update:function(e){return e?void(g=r.url()):void(r.url()!==g&&(r.url(g),r.replace()))},push:function(e,t,i){var o=e.format(t||{});null!==o&&t&&t["#"]&&(o+="#"+t["#"]),r.url(o),h=i&&i.$$avoidResync?r.url():n,i&&i.replace&&r.replace()},href:function(n,i,o){if(!n.validates(i))return null;var a=e.html5Mode();t.isObject(a)&&(a=a.enabled);var l=n.format(i);if(o=o||{},a||null===l||(l="#"+e.hashPrefix()+l),null!==l&&i&&i["#"]&&(l+="#"+i["#"]),l=s(l,a,o.absolute),!o.absolute||!l)return l;var u=!a&&l?"/":"",c=r.port();return c=80===c||443===c?"":":"+c,[r.protocol(),"://",r.host(),c,u,l].join("")}}}var l,u=[],c=null,f=!1;this.rule=function(e){if(!R(e))throw new Error("'rule' must be a function");return u.push(e),this},this.otherwise=function(e){if(I(e)){var t=e;e=function(){return t}}else if(!R(e))throw new Error("'rule' must be a function");return c=e,this},this.when=function(e,t){var n,s=I(t);if(I(e)&&(e=r.compile(e)),!s&&!R(t)&&!F(t))throw new Error("invalid 'handler' in when()");var l={matcher:function(e,t){return s&&(n=r.compile(t),t=["$match",function(e){return n.format(e)}]),L(function(n,r){return a(n,t,e.exec(r.path(),r.search()))},{prefix:I(e.prefix)?e.prefix:""})},regex:function(e,t){if(e.global||e.sticky)throw new Error("when() RegExp must not be global or sticky");return s&&(n=t,t=["$match",function(e){return o(n,e)}]),L(function(n,r){return a(n,t,e.exec(r.path()))},{prefix:i(e)})}},u={matcher:r.isMatcher(e),regex:e instanceof RegExp};for(var c in u)if(u[c])return this.rule(l[c](e,t));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(e){e===n&&(e=!0),f=e},this.$get=s,s.$inject=["$location","$rootScope","$injector","$browser"]}function w(e,i){function o(e){return 0===e.indexOf(".")||0===e.indexOf("^")}function d(e,t){if(!e)return n;var r=I(e),i=r?e:e.name;if(o(i)){if(!t)throw new Error("No reference point given for path '"+i+"'");t=d(t);for(var a=i.split("."),s=0,l=a.length,u=t;l>s;s++)if(""!==a[s]||0!==s){if("^"!==a[s])break;if(!u.parent)throw new Error("Path '"+i+"' not valid for state '"+t.name+"'");u=u.parent}else u=t;a=a.slice(s).join("."),i=u.name+(u.name&&a?".":"")+a}var c=E[i];return!c||!r&&(r||c!==e&&c.self!==e)?n:c}function p(e,t){S[e]||(S[e]=[]),S[e].push(t)}function m(e){for(var t=S[e]||[];t.length;)g(t.shift())}function g(t){t=r(t,{self:t,resolve:t.resolve||{},toString:function(){return this.name}});var n=t.name;if(!I(n)||n.indexOf("@")>=0)throw new Error("State must have a valid name");if(E.hasOwnProperty(n))throw new Error("State '"+n+"'' is already defined");var i=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):I(t.parent)?t.parent:P(t.parent)&&I(t.parent.name)?t.parent.name:"";if(i&&!E[i])return p(i,t.self);for(var o in M)R(M[o])&&(t[o]=M[o](t,M.$delegates[o]));return E[n]=t,!t[_]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){k.$current.navigable==t&&u(e,n)||k.transitionTo(t,e,{inherit:!0,location:!1})}]),m(n),t}function v(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=k.$current.name.split("."),r=0,i=t.length;i>r;r++)"*"===t[r]&&(n[r]="*");return"**"===t[0]&&(n=n.slice(s(n,t[1])),n.unshift("**")),"**"===t[t.length-1]&&(n.splice(s(n,t[t.length-2])+1,Number.MAX_VALUE),n.push("**")),t.length==n.length&&n.join("")===t.join("")}function b(e,t){return I(e)&&!N(t)?M[e]:R(t)&&I(e)?(M[e]&&!M.$delegates[e]&&(M.$delegates[e]=M[e]),M[e]=t,this):this}function $(e,t){return P(e)?t=e:t.name=e,g(t),this}function w(e,i,o,s,f,p,m,g,b){function $(t,n,r,o){var a=e.$broadcast("$stateNotFound",t,n,r);if(a.defaultPrevented)return m.update(),T;if(!a.retry)return null;if(o.$retry)return m.update(),D;var s=k.transition=i.when(a.retry);return s.then(function(){return s!==k.transition?S:(t.options.$retry=!0,k.transitionTo(t.to,t.toParams,t.options))},function(){return T}),m.update(),s}function w(e,n,r,a,l,u){function d(){var n=[];return j(e.views,function(r,i){var a=r.resolve&&r.resolve!==e.resolve?r.resolve:{};a.$template=[function(){return o.load(i,{view:r,locals:l.globals,params:p,notify:u.notify})||""}],n.push(f.resolve(a,l.globals,l.resolve,e).then(function(n){if(R(r.controllerProvider)||F(r.controllerProvider)){var o=t.extend({},a,l.globals);n.$$controller=s.invoke(r.controllerProvider,null,o)}else n.$$controller=r.controller;n.$$state=e,n.$$controllerAs=r.controllerAs,l[i]=n}))}),i.all(n).then(function(){return l.globals})}var p=r?n:c(e.params.$$keys(),n),h={$stateParams:p};l.resolve=f.resolve(e.resolve,h,l.resolve,e);var m=[l.resolve.then(function(e){l.globals=e})];return a&&m.push(a),i.all(m).then(d).then(function(e){return l})}var S=i.reject(new Error("transition superseded")),M=i.reject(new Error("transition prevented")),T=i.reject(new Error("transition aborted")),D=i.reject(new Error("transition failed"));return C.locals={resolve:null,globals:{$stateParams:{}}},k={params:{},current:C.self,$current:C,transition:null},k.reload=function(e){return k.transitionTo(k.current,p,{reload:e||!0,inherit:!1,notify:!0})},k.go=function(e,t,n){return k.transitionTo(e,t,L({inherit:!0,relative:k.$current},n))},k.transitionTo=function(t,n,o){n=n||{},o=L({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},o||{});var a,u=k.$current,f=k.params,h=u.path,g=d(t,o.relative),v=n["#"];if(!N(g)){var y={to:t,toParams:n,options:o},b=$(y,u.self,f,o);if(b)return b;if(t=y.to,n=y.toParams,o=y.options,g=d(t,o.relative),!N(g)){if(!o.relative)throw new Error("No such state '"+t+"'");throw new Error("Could not resolve '"+t+"' from state '"+o.relative+"'")}}if(g[_])throw new Error("Cannot transition to abstract state '"+t+"'");if(o.inherit&&(n=l(p,n||{},k.$current,g)),!g.params.$$validates(n))return D;n=g.params.$$values(n),t=g;var E=t.path,T=0,A=E[T],O=C.locals,R=[];if(o.reload){if(I(o.reload)||P(o.reload)){if(P(o.reload)&&!o.reload.name)throw new Error("Invalid reload state object");var F=!0===o.reload?h[0]:d(o.reload);if(o.reload&&!F)throw new Error("No such reload state '"+(I(o.reload)?o.reload:o.reload.name)+"'");for(;A&&A===h[T]&&A!==F;)O=R[T]=A.locals,T++,A=E[T]}}else for(;A&&A===h[T]&&A.ownParams.$$equals(n,f);)O=R[T]=A.locals,T++,A=E[T];if(x(t,n,u,f,O,o))return v&&(n["#"]=v),k.params=n,U(k.params,p),o.location&&t.navigable&&t.navigable.url&&(m.push(t.navigable.url,n,{$$avoidResync:!0,replace:"replace"===o.location}),m.update(!0)),k.transition=null,i.when(k.current);if(n=c(t.params.$$keys(),n||{}),o.notify&&e.$broadcast("$stateChangeStart",t.self,n,u.self,f).defaultPrevented)return e.$broadcast("$stateChangeCancel",t.self,n,u.self,f),m.update(),M;for(var j=i.when(O),H=T;H=T;r--)a=h[r],a.self.onExit&&s.invoke(a.self.onExit,a.self,a.locals.globals),a.locals=null;for(r=T;r=0?i:i+"@"+(o?o.state.name:"")}function _(e,t){var n,r=e.match(/^\s*({[^}]*})\s*$/);if(r&&(e=t+"("+r[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function M(e){var t=e.parent().inheritedData("$uiView");return t&&t.state&&t.state.name?t.state:void 0}function T(e,n){var r=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(i,o,a,s){var l=_(a.uiSref,e.current.name),u=null,c=M(o)||e.$current,f="[object SVGAnimatedString]"===Object.prototype.toString.call(o.prop("href"))?"xlink:href":"href",d=null,p="A"===o.prop("tagName").toUpperCase(),h="FORM"===o[0].nodeName,m=h?"action":f,g=!0,v={relative:c,inherit:!0},y=i.$eval(a.uiSrefOpts)||{};t.forEach(r,function(e){e in y&&(v[e]=y[e])});var b=function(n){if(n&&(u=t.copy(n)),g){d=e.href(l.state,u,v);var r=s[1]||s[0];return r&&r.$$addStateInfo(l.state,u),null===d?(g=!1,!1):void a.$set(m,d)}};l.paramExpr&&(i.$watch(l.paramExpr,function(e,t){e!==u&&b(e)},!0),u=t.copy(i.$eval(l.paramExpr))),b(),h||o.bind("click",function(t){if(!((t.which||t.button)>1||t.ctrlKey||t.metaKey||t.shiftKey||o.attr("target"))){var r=n(function(){e.go(l.state,u,v)});t.preventDefault();var i=p&&!d?1:0;t.preventDefault=function(){i--<=0&&n.cancel(r)}}})}}}function D(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs",function(t,r,i){function o(){a()?r.addClass(l):r.removeClass(l)}function a(){for(var e=0;er;r++){o=a[r];var c=this.params[o],f=n[r+1];for(i=0;ir;r++)o=a[r],u[o]=this.params[o].value(t[o]);return u},v.prototype.parameters=function(e){return N(e)?this.params[e]||null:this.$$paramNames},v.prototype.validates=function(e){return this.params.$$validates(e)},v.prototype.format=function(e){function t(e){return encodeURIComponent(e).replace(/-/g,function(e){return"%5C%"+e.charCodeAt(0).toString(16).toUpperCase()})}e=e||{};var n=this.segments,r=this.parameters(),i=this.params;if(!this.validates(e))return null;var o,a=!1,s=n.length-1,l=r.length,u=n[0];for(o=0;l>o;o++){var c=s>o,f=r[o],d=i[f],p=d.value(e[f]),m=d.isOptional&&d.type.equals(d.value(),p),g=!!m&&d.squash,v=d.type.encode(p);if(c){var y=n[o+1];if(!1===g)null!=v&&(u+=F(v)?h(v,t).join("-"):encodeURIComponent(v)),u+=y;else if(!0===g){var b=u.match(/\/$/)?/\/?(.*)/:/(.*)/;u+=y.match(b)[1]}else I(g)&&(u+=g+y)}else{if(null==v||m&&!1!==g)continue;F(v)||(v=[v]),v=h(v,encodeURIComponent).join("&"+f+"="),u+=(a?"&":"?")+f+"="+v,a=!0}}return u},y.prototype.is=function(e,t){return!0},y.prototype.encode=function(e,t){return e},y.prototype.decode=function(e,t){return e},y.prototype.equals=function(e,t){return e==t},y.prototype.$subPattern=function(){var e=this.pattern.toString();return e.substr(1,e.length-2)},y.prototype.pattern=/.*/,y.prototype.toString=function(){return"{Type:"+this.name+"}"},y.prototype.$normalize=function(e){return this.is(e)?e:this.decode(e)},y.prototype.$asArray=function(e,t){function r(e,t){function r(e,t){return function(){return e[t].apply(e,arguments)}}function i(e){return F(e)?e:N(e)?[e]:[]}function o(e){switch(e.length){case 0:return n;case 1:return"auto"===t?e[0]:e;default:return e}}function a(e){return!e}function s(e,t){return function(n){n=i(n);var r=h(n,e);return!0===t?0===p(r,a).length:o(r)}}this.encode=s(r(e,"encode")),this.decode=s(r(e,"decode")),this.is=s(r(e,"is"),!0),this.equals=function(e){return function(t,n){var r=i(t),o=i(n);if(r.length!==o.length)return!1;for(var a=0;a=":n(e.from)}:{"<=":n(e.to)}}function s(t){return t?(t=this.compactFilters(t),e.transform(t,function(e,t,n){t.from||t.to?e[n]=a(t):t.in||t.nin?e[n]=l(t):e[n]=t},{})):null}function l(e){return e.in?{IN:e.in}:{"NOT IN":e.nin}}return{compactFilters:r,extend:i,processFilters:s}})}),define("common/models/contact-job-role.model",["common/modules/models","common/models/model","common/instances/contact-job-role-instance.instance","common/services/api/contact-job-role-api.api"],function(e){"use strict";e.factory("ContactJobRole",["$log","Model","ContactJobRoleAPI","ContactJobRoleInstance",function(e,t,n,r){return e.debug("ContactJobRole"),t.extend({all:function(e){return n.all(e).then(function(e){return e.list.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/instances/group-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("GroupInstance",["ModelInstance",function(e){var t=["id","name","title","description"];return e.extend({fromAPIFilter:function(e,n,r){_.includes(t,r)&&(e[r]=this[r])}})}])}),define("common/mocks/module",["common/angular"],function(e){"use strict";return e.module("common.mocks",[])}),define("common/mocks/services/api/group-mock",["common/lodash","common/mocks/module"],function(e,t){"use strict";t.factory("api.group.mock",["$q",function(t){function n(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(e,t,r){var i,o,a;return i=r||this.mockedGroups().list,e&&(i=i.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(o=(t.page-1)*t.size,a=o+t.size,i=i.slice(o,a)),n({list:i,total:i.length,allIds:i.map(function(e){return e.id}).join(",")})},find:function(e,t){return n(t||this.mockedGroups().list.filter(function(t){return t.id===e})[0])},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroups:function(){return{total:5,list:[{id:"1",name:"Administrators",title:"Administrators",description:"Contacts in this group are assigned Administrator role permissions.",is_active:"1",visibility:"User and User Admin Only",group_type:["1"],is_hidden:"0",is_reserved:"0"},{id:"2",name:"Newsletter Subscribers",title:"Newsletter Subscribers",is_active:'"1',visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"3",name:"Summer Program Volunteers",title:"Summer Program Volunteers",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"4",name:"Advisory Board",title:"Advisory Board",is_active:"1",visibility:"Public Pages",where_clause:"...",select_tables:"...",where_tables:"...",group_type:["1","2"],is_hidden:"0",is_reserved:"0"},{id:"5",name:"Case_Resources",title:"Case Resources",description:"Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.",is_active:"1",visibility:"User and User Admin Only",where_clause:"...",select_tables:"...",where_tables:"...",group_type:"2",is_hidden:"0",is_reserved:"0"}]}}}}])}),define("common/mocks/data/contact.data",[],function(){return{all:{is_error:0,version:3,count:26,values:[{id:"1",contact_id:"1",display_name:"Dr. Kiara Jensen-Parker",email:"kh.jensen-parker@testing.info",contact_type:"Individual"},{id:"2",contact_id:"2",display_name:"jacobc82@lol.co.pl",email:"cruz.v.jacob@spamalot.com",contact_type:"Individual"},{id:"3",contact_id:"3",display_name:"Mei Müller-Nielsen",email:"mz.mller-nielsen75@infomail.co.pl",contact_type:"Individual"},{id:"4",contact_id:"4",display_name:"Ms. Brigette Deforest",email:"deforest.p.brigette9@fakemail.info",contact_type:"Individual"},{id:"5",contact_id:"5",display_name:"robertsc@testing.net",email:"clintr56@mymail.org",contact_type:"Individual"},{id:"6",contact_id:"6",display_name:"Dr. Allen Samuels Sr.",email:"samuelsa@mymail.org",contact_type:"Individual"},{id:"7",contact_id:"7",display_name:"Mei Wilson",email:"wilson.u.mei59@sample.org",contact_type:"Individual"},{id:"8",contact_id:"8",display_name:"Dr. Betty Díaz",email:"dazb@sample.co.nz",contact_type:"Individual"},{id:"9",contact_id:"9",display_name:"Bob Jones-Dimitrov",email:"bobj@testmail.biz",contact_type:"Individual"},{id:"10",contact_id:"10",display_name:"Truman Samuels III",email:"trumans@spamalot.org",contact_type:"Individual"},{id:"11",contact_id:"11",display_name:"Iris Wagner",email:"iwagner75@notmail.info",contact_type:"Individual"},{id:"12",contact_id:"12",display_name:"Mr. Rosario McReynolds",email:"rosariomcreynolds@testmail.org",contact_type:"Individual"},{id:"13",contact_id:"13",display_name:"Shad Jones-Dimitrov III",email:"shadj@lol.net",contact_type:"Individual"},{id:"14",contact_id:"14",display_name:"Toby Cruz Sr.",email:"",contact_type:"Individual"},{id:"15",contact_id:"15",display_name:"lareedaz61@testing.com",email:"lareedaz61@testing.com",contact_type:"Individual"},{id:"16",contact_id:"16",display_name:"Dr. Jay Deforest",email:"jayd@fishmail.org",contact_type:"Individual"},{id:"17",contact_id:"17",display_name:"Mr. Norris Cruz",email:"norriscruz@spamalot.info",contact_type:"Individual"},{id:"18",contact_id:"18",display_name:"herminiac@fishmail.com",email:"herminiac@fishmail.com",contact_type:"Individual"},{id:"19",contact_id:"19",display_name:"Ashley Terrell",email:"terrell.ashley@testmail.info",contact_type:"Individual"},{id:"20",contact_id:"20",display_name:"Kandace Parker-Díaz",email:"parker-daz.kandace67@fishmail.co.uk",contact_type:"Individual"},{id:"21",contact_id:"21",display_name:"Nicole Samuels",email:"ng.samuels@testmail.net",contact_type:"Individual"},{id:"22",contact_id:"22",display_name:"Dr. Kandace Wattson",email:"kandacewattson@testing.info",contact_type:"Individual"},{id:"23",contact_id:"23",display_name:"Brittney Cruz",email:"cruz.brittney@spamalot.co.nz",contact_type:"Individual"},{id:"24",contact_id:"24",display_name:"Shauna Olsen",email:"",contact_type:"Individual"},{id:"202",contact_id:"202",display_name:"civihr_staff@compucorp.co.uk",email:"civihr_staff@compucorp.co.uk",contact_type:"Individual"},{id:"203",contact_id:"203",display_name:"civihr_manager@compucorp.co.uk",email:"civihr_manager@compucorp.co.uk",contact_type:"Individual"}]}}}),define("common/mocks/services/api/contact-mock",["common/lodash","common/mocks/module","common/mocks/data/contact.data"],function(e,t,n){"use strict";t.factory("api.contact.mock",["$q",function(t){function r(e){var n=t.defer();return n.resolve(e),n.promise}return{all:function(t,i,o,a,s){var l,u,c;return l=s||n.all.values,t&&(l=l.filter(function(n){return Object.keys(t).every(function(r){return null===t[r]||("display_name"===r?new RegExp(t[r],"i").test(n[r]):t[r].IN?e.includes(t[r].IN,n[r]):n[r]===t[r])})})),i&&(u=(i.page-1)*i.size,c=u+i.size,l=l.slice(u,c)),r({list:l,total:l.length,allIds:l.map(function(e){return e.id}).join(",")})},find:function(e,t){return r(t||n.all.values.filter(function(t){return t.id===e})[0])},leaveManagees:function(){return r(this.mockedContacts().list)},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedContacts:function(){var e=n.all.values;return{total:e.length,list:e.map(function(e){return e})}}}}])}),define("common/mocks/services/api/group-contact-mock",["common/lodash","common/mocks/module","common/mocks/services/api/contact-mock","common/mocks/services/api/group-mock"],function(e,t){"use strict";t.factory("api.group-contact.mock",["$q","api.contact.mock","api.group.mock",function(t,n,r){function i(t){return e.sample(t)}function o(e){var n=t.defer();return n.resolve(e),n.promise}var a=n.mockedContacts().list,s=r.mockedGroups().list;return{all:function(e,t,n){var r,i,a;return r=n||this.mockedGroupsContacts.list,e&&(r=r.filter(function(t){return Object.keys(e).every(function(n){return t[n]===e[n]})})),t&&(i=(t.page-1)*t.size,a=i+t.size,r=r.slice(i,a)),o({list:r,total:r.length,allIds:r.map(function(e){return e.id}).join(",")})},spyOnMethods:function(){e.functions(this).forEach(function(e){spyOn(this,e).and.callThrough()}.bind(this))},mockedGroupsContacts:{total:a.length,list:function(){var e=1;return a.map(function(t){return{id:""+e++,group_id:i(s).id,contact_id:t.id,status:"Added"}})}()}}}])}),define("common/models/group",["common/modules/models","common/models/model","common/models/instances/group-instance","common/mocks/services/api/group-mock","common/mocks/services/api/group-contact-mock"],function(e){"use strict";e.factory("Group",["Model","api.group.mock","api.group-contact.mock","GroupInstance",function(e,t,n,r){return e.extend({all:function(e,n){return t.all(this.processFilters(e),n).then(function(e){return e.list=e.list.map(function(e){return r.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return r.init(e,!0)})},contactIdsOf:function(e){return n.all({group_id:e}).then(function(e){return e.list.map(function(e){return e.contact_id})})}})}])}),define("common/models/instances/job-role-instance",["common/lodash","common/moment","common/modules/models-instances","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("JobRoleInstance",["ModelInstance","HR_settings",function(n,r){return n.extend({fromAPIFilter:function(n,i,o){var a=r.DATE_FORMAT.toUpperCase();e.endsWith(o,"_date")?n[o]=t(this[o],"YYYY-MM-DD HH:mm:ss").format(a):"api.HRJobContract.getsingle"===o?(n.contact_id=this[o].contact_id,n.job_contract_id=this[o].id):n[o]=this[o]},toAPIFilter:function(n,i,o){var a=["contact_id","job_contract_id"],s=r.DATE_FORMAT.toUpperCase();if(e.endsWith(o,"_date"))n[o]=t(this[o],s).format("YYYY-MM-DD HH:mm:ss");else{if(e.includes(a,o))return;n[o]=this[o]}}})}])}),define("common/services/api/job-role",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.job-role",["$log","api",function(e,t){return e.debug("api.jobRole"),t.extend({all:function(t,n,r,i){return e.debug("api.jobRole.api"),this.getAll("HrJobRoles",t,n,r,i)},find:function(t){return e.debug("api.jobRole.find"),this.sendGET("HRJobRole","get",{id:""+t},!1).then(function(e){return e.values[0]})}})}])}),define("common/models/job-role",["common/modules/models","common/models/model","common/models/instances/job-role-instance","common/services/api/job-role"],function(e){"use strict";e.factory("JobRole",["Model","api.job-role","JobRoleInstance",function(e,t,n){return e.extend({all:function(e,r){return t.all(this.processFilters(e),r).then(function(e){return e.list=e.list.map(function(e){return n.init(e,!0)}),e})},find:function(e){return t.find(e).then(function(e){return n.init(e,!0)})}})}])}),define("common/services/api/contact",["common/modules/apis","common/services/api"],function(e){"use strict";e.factory("api.contact",["$log","api",function(e,t){return e.debug("api.contact"),t.extend({all:function(t,n,r,i){return e.debug("api.contact.api"),this.getAll("Contact",t,n,r,i)},find:function(t){return e.debug("api.contact.find"),this.sendGET("Contact","get",{id:""+t},!1).then(function(e){return e.values[0]})},leaveManagees:function(t,n){return e.debug("api.contact.leaveManagees"),n=_.assign({},n,{managed_by:t}),this.sendGET("Contact","getleavemanagees",n).then(function(e){return e.values})}})}])}),define("common/models/instances/contact-instance",["common/modules/models-instances","common/models/instances/instance","common/services/api/contact"],function(e){"use strict";e.factory("ContactInstance",["ModelInstance","api.contact",function(e,t){return e.extend({leaveManagees:function(e){return t.leaveManagees(this.id,e)}})}])}),define("common/models/contact",["common/lodash","common/modules/models","common/models/model","common/models/contact-job-role.model","common/models/group","common/models/job-role","common/models/instances/contact-instance","common/services/api/contact"],function(e,t){"use strict";t.factory("Contact",["$q","Model","api.contact","Group","JobRole","ContactJobRole","ContactInstance",function(t,n,r,i,o,a,s){function l(t,n){return!e.isEmpty(e.intersection(e.keys(t),n))}function u(e){return a.all(e).then(function(e){return e.map(function(e){return e.contact_id})})}function c(t,n){return e(t).omit(d).omit(p).assign({id:{in:e.intersection.apply(null,n)}}).value()}function f(n){var r=t.defer(),o=[];return n=this.compactFilters(n),l(n,p)&&o.push(u(e.pick(n,p))),l(n,d)&&o.push(i.contactIdsOf(n.group_id)),e.isEmpty(o)?r.resolve(this.processFilters(n)):t.all(o).then(function(e){n=c(n,e),r.resolve(this.processFilters(n))}.bind(this)),r.promise}var d=["group_id"],p=["region","department","level_type","location"];return n.extend({all:function(e,t,n,i){return f.call(this,e).then(function(e){return e&&e.id&&!e.id.IN.length?{list:[]}:r.all(e,t,n,i)}).then(function(e){return e.list=e.list.map(function(e){return s.init(e,!0)}),e})},find:function(e){return r.find(e).then(function(e){return s.init(e,!0)})},leaveManagees:function(e,t){return f.call(this,t).then(function(t){return t&&t.id&&!t.id.IN.length?[]:r.leaveManagees(e,t)})}})}])}),define("common/models/instances/contract-instance",["common/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("ContractInstance",["ModelInstance",function(e){return e.extend({})}])}),define("common/services/api/contract",["common/lodash","common/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("api.contract",["$log","api",function(t,n){function r(t){var n=e.clone(t);return n.info=n["api.HRJobContract.getfulldetails"],delete n["api.HRJobContract.getfulldetails"],n}return t.debug("api.contract"),n.extend({all:function(e){return t.debug("ContractAPI.all"),e=e||{},e["api.HRJobContract.getfulldetails"]={jobcontract_id:"$value.id"},e.deleted=0,this.sendGET("HRJobContract","get",e,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r)})}})}])}),define("common/models/contract",["common/modules/models","common/models/model","common/models/instances/contract-instance","common/services/api/contract"],function(e){"use strict";e.factory("Contract",["$log","Model","api.contract","ContractInstance",function(e,t,n,r){return e.debug("Contract"),t.extend({all:function(e){return n.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})}})}])}),define("common/models/option-group",["common/modules/models","common/models/model","common/services/api/option-group"],function(e){"use strict";e.factory("OptionGroup",["Model","api.optionGroup",function(e,t){return e.extend({valuesOf:function(e,n){return t.valuesOf(e,n)}})}])}),function(e,t){define("common/models/session.model",["common/modules/models","common/models/model"],function(n){"use strict";n.factory("Session",["$log","$q","Model",function(n,r,i){return n.debug("Session"),i.extend({get:function(){var n={contactId:e.vars.session?e.vars.session.contact_id:t.settings.currentCiviCRMUserId};if(!n.contactId)throw new Error("Session Error: *Logged In Contact Id* is not defined");return r.resolve(n)}})}])})}(CRM,window.Drupal),define("common/bundles/models",["common/instances/contact-job-role-instance.instance","common/models/model","common/models/contact","common/models/contact-job-role.model","common/models/contract","common/models/group","common/models/job-role","common/models/option-group","common/models/session.model","common/models/instances/instance","common/models/instances/contact-instance","common/models/instances/contract-instance","common/models/instances/group-instance","common/models/instances/job-role-instance"],function(){}),define("common/services/dialog/dialog",["common/lodash","common/modules/services"],function(e,t){"use strict";function n(t,n,r){function i(i){var o;if(!e.isObject(i))throw new Error("Dialog Service: Options passed should be an object");return o=n.children(),t.open({appendTo:o.length?o.eq(0):n,size:"sm",controller:"DialogController",template:r.get("dialog.html"),resolve:{options:function(){return i}}}).result}return{open:i}}t.factory("dialog",n),n.$inject=["$uibModal","$rootElement","$templateCache"]}),define("common/controllers/dialog/dialog-ctrl",["common/lodash","common/modules/controllers"],function(e,t){"use strict";function n(t,n,r,i){function o(t){e.assign(n,e.defaultsDeep(t,{title:"CiviHR",msg:"",copyConfirm:"",copyCancel:"",classConfirm:"btn-primary",loading:!1}))}function a(){r.close(!1)}function s(){n.loading=!0,r.closed.then(n.onCloseAfterConfirm),t.resolve().then(n.onConfirm).then(function(){r.close(!0)})}n.cancel=a,n.confirm=s,function(){o(i),i.optionsPromise&&i.optionsPromise().then(function(e){o(e)})}()}t.controller("DialogController",n),n.$inject=["$q","$scope","$uibModalInstance","options"]}),define("common/modules/dialog",["common/angular","common/services/dialog/dialog","common/controllers/dialog/dialog-ctrl","common/angularBootstrap","common/directives/loading","common/modules/templates"],function(e){"use strict";return e.module("common.dialog",["ui.bootstrap","common.directives","common.templates"])}),define("common/decorators/xeditable-civi/editable-directive-factory",[],function(){"use strict";return["$delegate",function(e){return function(t){var n=e(t);return n.compile=function(e){var t,r=e[0].attributes.getNamedItem("ng-href");return e.append(''),r&&(t=angular.element(""),t.text("Follow link"),t.attr(r.nodeName,r.value),t.attr("ng-click","$event.stopPropagation();"),t.addClass("editable-link"),e.append(t),e.addClass("editable-with-link")),{post:n.link}},n}}]}),define("common/directives/xeditable-civi/editable-ta",[],function(){"use strict";return["editableDirectiveFactory","$timeout",function(e,t){var n,r;return r=e({directiveName:"editableTa",inputTpl:"",render:function(){this.parent.render.call(this),this.inputEl.parent().parent().removeClass("form-inline"),this.inputEl.addClass("editable-ta"),this.inputEl.attr("ng-model","ta.$data"),this.inputEl.attr("ta-toolbar",this.attrs.eTaToolbar||'[["bold","italics","underline","strikeThrough","ul","ol","undo","redo","clear"]]'),t(function(){this.inputEl.find("textarea").hide()}.bind(this),0)},save:function(){this.scope.$data=this.scope.ta.$data,this.parent.save.call(this)},setLocalValue:function(){this.parent.setLocalValue.call(this),this.scope.ta.$data=this.scope.$data}}),n=r.link,r.link=function(e,t,r,i){return e.ta={},n(e,t,r,i)},r}]}),define("common/modules/xeditable-civi",["common/angular","common/decorators/xeditable-civi/editable-directive-factory","common/directives/xeditable-civi/editable-ta","common/angularXeditable","common/text-angular"],function(e,t,n){"use strict";return e.module("xeditable-civi",["xeditable","textAngular"]).directive("editableTa",n)}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/org.civicrm.reqangular/dist/reqangular.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css index b7e9e105199..c3038ac8700 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css @@ -1 +1 @@ -#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-selected{border:solid 1px #fff;border-radius:4px;box-shadow:0 0 1px 0 #c7cbd0;height:26px;margin-bottom:-1px;margin-left:-2px;margin-right:9px;margin-top:9px;padding-left:9px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__reset-absence-types-filter{color:#464354}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} +#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-selected,#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-clickable:hover{border:solid 1px #fff;border-radius:4px;box-shadow:0 0 1px 0 #c7cbd0;height:26px;margin-bottom:-1px;margin-left:-2px;margin-right:9px;margin-top:9px;padding-left:9px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__reset-absence-types-filter{color:#464354}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 2bf1fca41b1..0f8bc211aeb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o){"use strict";function s(e,n,t,a,s){o.openModal(n,t,a,s)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function r(e){var t=n(e.from_date).isSame(h.date,"day"),a=n(e.to_date).isSame(h.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function c(n,t){h.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:n.type_id}).title}function u(n,t){var a=e.find(h.supportData.absenceTypes,{id:n.type_id}),o=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function l(e,n){n.from_date=new Date(e.from_date),n.to_date=new Date(e.to_date)}function d(n,t){"days"===t.unit&&(t.from_date_type=e.find(h.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(h.supportData.dayTypes,{value:n.to_date_type}).label)}function m(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?i(n):r(e),n.label=t}function f(e){var n=h.contactData.leaveRequestsAttributes[e.id];[u,d,m,l,c].forEach(function(t){t.call(this,e,n)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}t.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=s,function(){p()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){ -e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!0,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function O(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function L(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={}, +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o){"use strict";function s(e,n,t,a,s){o.openModal(n,t,a,s)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function r(e){var t=n(e.from_date).isSame(h.date,"day"),a=n(e.to_date).isSame(h.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function c(n,t){h.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:n.type_id}).title}function u(n,t){var a=e.find(h.supportData.absenceTypes,{id:n.type_id}),o=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function l(e,t){t.from_date=n(e.from_date).toDate(),t.to_date=n(e.to_date).toDate()}function d(n,t){"days"===t.unit&&(t.from_date_type=e.find(h.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(h.supportData.dayTypes,{value:n.to_date_type}).label)}function m(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?i(n):r(e),n.label=t}function f(e){var n=h.contactData.leaveRequestsAttributes[e.id];[u,d,m,l,c].forEach(function(t){t.call(this,e,n)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}t.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=s,function(){p()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){ +e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!1,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function O(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function L(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={}, G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){ return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 45b0eaa80d7..f41c4a70c1f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{ +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,n){n.from_date=t(e.from_date).toDate(),n.to_date=t(e.to_date).toDate()}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{ title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){ return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x, Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 5325b24e36c..b4e9a2cfb80 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}), +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,n){n.from_date=t(e.from_date).toDate(),n.to_date=t(e.to_date).toDate()}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}), define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times ;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1, Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index d6205418478..9505dbe0834 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";E(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){O("previous"),O("next")}function E(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,t){t.from_date=new Date(e.from_date),t.to_date=new Date(e.to_date)}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function f(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,m,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!0,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{ +B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,n){n.from_date=t(e.from_date).toDate(),n.to_date=t(e.to_date).toDate()}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function f(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,m,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{ in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){ return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file From 03d97dc47380e107714b563ae753d58d1540ef5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Wed, 30 May 2018 16:05:48 -0400 Subject: [PATCH 196/251] PCHR-3723: Display others leave requests as a generic absence type --- .../shared/components/leave-calendar.component.js | 15 +++++++++++++++ .../components/leave-calendar.component.spec.js | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index bfc7398fe49..a3d3ad72a56 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -78,6 +78,7 @@ define([ ]); }) .then(function () { + appendGenericAbsenceType(); injectAndShowMonth(); setMonthPaginatorsAvailability(); }) @@ -86,6 +87,20 @@ define([ }); }()); + /** + * Appends a generic absence type that can be used for private + * leave requests. + */ + function appendGenericAbsenceType () { + vm.supportData.absenceTypes.push({ + id: '', + title: 'Leave', + color: '#4D4D68', + calculation_unit: _.chain(vm.supportData.calculationUnits) + .find({ name: 'days' }).get('value').value() + }); + } + /** * Creates a list of all the months in the currently selected period */ diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index 130caa759e5..bc6053b1999 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -154,6 +154,16 @@ it('stores toil amounts', function () { expect(controller.supportData.toilAmounts).toBeDefined(); }); + + it('appends a generic absence type that can be used for private leave requests', function () { + expect(controller.supportData.absenceTypes).toContain({ + id: '', + title: 'Leave', + color: '#4D4D68', + calculation_unit: _.chain(controller.supportData.calculationUnits) + .find({ name: 'days' }).get('value').value() + }); + }); }); describe('taking leave filter', function () { From 976352b546e2f002dc5910cbb494d21f40bc0d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Wed, 30 May 2018 18:22:52 -0400 Subject: [PATCH 197/251] PCHR-3723: Load all staffs with leave requests without using look ups --- .../leave-calendar-staff.controller.js | 11 +--------- .../shared/services/leave-calendar.service.js | 21 +++++++++++-------- .../leave-calendar-staff.controller.spec.js | 16 -------------- .../services/leave-calendar.service.spec.js | 15 +++++++++++++ 4 files changed, 28 insertions(+), 35 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js index 3fd947ac340..6944fd50941 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js @@ -46,16 +46,7 @@ define([ * @return {Promise} resolves as an {Array} */ loadContacts: function () { - return leaveCalendar.loadAllLookUpContacts() - .then(function (lookupContacts) { - vm.lookupContacts = lookupContacts; - }) - .then(leaveCalendar.loadContactIdsToReduceTo) - .then(function (contactIdsToReduceTo) { - vm.contactIdsToReduceTo = contactIdsToReduceTo; - vm.contactIdsToReduceTo.push(vm.contactId); - }) - .then(leaveCalendar.loadFilteredContacts); + return leaveCalendar.loadFilteredContacts(); } }; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js index 3a53b53c8f3..c5d48e2e2c5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js @@ -91,19 +91,22 @@ define([ * @return {Object} */ function prepareContactFilters () { - return { + var filters = { department: _.get(vm, 'filters.userSettings.department.value', null), level_type: _.get(vm, 'filters.userSettings.level_type.value', null), location: _.get(vm, 'filters.userSettings.location.value', null), - region: _.get(vm, 'filters.userSettings.region.value', null), - id: { - 'IN': vm.filters.userSettings.contact - ? [vm.filters.userSettings.contact.id] - : vm.lookupContacts.map(function (contact) { - return contact.id; - }) - } + region: _.get(vm, 'filters.userSettings.region.value', null) }; + var hasContactFilter = !!vm.filters.userSettings.contact; + var hasLookUpContactsFilter = _.isArray(vm.lookupContacts) && vm.lookupContacts.length; + + if (hasContactFilter) { + filters.id = { 'IN': [vm.filters.userSettings.contact.id] }; + } else if (hasLookUpContactsFilter) { + filters.id = { 'IN': _.pluck(vm.lookupContacts, 'id') }; + } + + return filters; } return { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js index 43fc14cc3d2..e21abe183a4 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js @@ -77,26 +77,10 @@ $rootScope.$digest(); }); - it('loads all the look up contacts', function () { - expect(leaveCalendar.loadAllLookUpContacts).toHaveBeenCalled(); - }); - - it('loads the contact ids to reduce to', function () { - expect(leaveCalendar.loadContactIdsToReduceTo).toHaveBeenCalled(); - }); - it('loads the filtered contacts', function () { expect(leaveCalendar.loadFilteredContacts).toHaveBeenCalled(); }); - it('stores the looked up contacts', function () { - expect(vm.lookupContacts).toEqual(lookedUpContacts); - }); - - it('stores the contact ids to reduce to by contract plus the logged in contact id', function () { - expect(vm.contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); - }); - it('returns the filtered contacts', function () { expect(result).toEqual(filteredContacts); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js index e9813090c6c..7caa37267ab 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js @@ -187,6 +187,21 @@ define([ expect(Contact.all).toHaveBeenCalledWith(expectedFilters, null, 'display_name'); }); }); + + describe('when no contact or look up list are selected as filters', function () { + beforeEach(function () { + delete vm.lookupContacts; + delete vm.filters.userSettings.contact; + + leaveCalendar.loadFilteredContacts(); + }); + + it('does not filter the request by contact id', function () { + expect(Contact.all).not.toHaveBeenCalledWith(jasmine.objectContaining({ + id: { 'IN': jasmine.any(Array) } + }), null, 'display_name'); + }); + }); }); /** From e437ebb218bd62fb165410c7f647173962db862e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Wed, 30 May 2018 19:29:34 -0400 Subject: [PATCH 198/251] PCHR-3723: Display single contact information on leave tab on the contact summary page --- .../shared/components/leave-calendar.component.js | 1 + .../leave-calendar-staff.controller.js | 11 ++++++++--- .../leave-calendar-staff.controller.spec.js | 15 +++++++++++++++ .../components/absence-tab-container.html | 6 +++++- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index a3d3ad72a56..e8988561182 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -11,6 +11,7 @@ define([ components.component('leaveCalendar', { bindings: { contactId: '<', + displaySingleContact: ' - + From 787c27a356e1cbd867c5120d8bcea461203eb2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Wed, 30 May 2018 20:59:59 -0400 Subject: [PATCH 199/251] PCHR-3723: Block staff from opening others leave request details --- .../shared/components/leave-calendar-day.component.js | 11 +++++------ .../components/leave-calendar-day.component.spec.js | 11 ++++------- .../views/shared/components/leave-calendar-day.html | 4 ++-- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js index 904cea45d2d..7d763ae579a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-day.component.js @@ -37,12 +37,9 @@ define([ * * @param {Object} event * @param {Object} leaveRequest - * @param {String} leaveType - * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (event, leaveRequest, leaveType, selectedContactId, isSelfRecord) { - LeavePopup.openModal(leaveRequest, leaveType, selectedContactId, isSelfRecord); + function openLeavePopup (event, leaveRequest) { + LeavePopup.openModalByID(leaveRequest.id); } /** @@ -95,8 +92,10 @@ define([ * @param {Object} leaveRequestAttributes */ function resolveLeaveRequestAbsenceTypeTitle (leaveRequest, leaveRequestAttributes) { + var absenceType = _.find(vm.supportData.absenceTypes, { id: leaveRequest.type_id }); + vm.contactData.leaveRequestsAttributes[leaveRequest.id].absenceTypeTitle = - _.find(vm.supportData.absenceTypes, { id: leaveRequest.type_id }).title; + absenceType.title; } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js index 3b2177b19b0..0cfa94048ee 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-day.component.spec.js @@ -238,19 +238,16 @@ define([ describe('openLeavePopup()', function () { var event; - var leaveRequest = { key: 'value' }; - var leaveType = 'some_leave_type'; - var selectedContactId = '101'; - var isSelfRecord = true; + var leaveRequest = { id: _.uniqueId() }; beforeEach(function () { event = jasmine.createSpyObj('event', ['stopPropagation']); - spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(event, leaveRequest, leaveType, selectedContactId, isSelfRecord); + spyOn(LeavePopup, 'openModalByID'); + controller.openLeavePopup(event, leaveRequest); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModalByID).toHaveBeenCalledWith(leaveRequest.id); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html index b72755b9cf7..886c9c62722 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-day.html @@ -26,7 +26,7 @@
    + ng-click="day.openLeavePopup($event, leaveRequest)">
    + ng-click="day.openLeavePopup($event, leaveRequest)">
    {{day.contactData.leaveRequestsAttributes[leaveRequest.id].absenceTypeTitle}}
    From 1a078f05267c287922f4efe0632325d64c7d237c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Wed, 30 May 2018 21:02:53 -0400 Subject: [PATCH 200/251] PCHR-3723: Handle filtering of generic absence type --- .../components/leave-calendar-legend.component.js | 2 +- .../leave-calendar-legend.component.spec.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index f93672d1f03..d2bffe1d15a 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -80,7 +80,7 @@ define([ }, function (newValue, oldValue) { if (newValue !== oldValue) { $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', - vm.absenceTypesToFilterBy); + _.compact(vm.absenceTypesToFilterBy)); } }, true); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index 0025952a814..55bef0de6df 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -134,6 +134,19 @@ define([ }); }); }); + + describe('when an absence type with an empty id is selected', function () { + beforeEach(function () { + controller.resetFilteringByAbsenceTypes(); + controller.toggleFilteringByAbsenceType(''); + $rootScope.$digest(); + }); + + it('emits an empty array', function () { + expect($rootScope.$emit).toHaveBeenCalledWith( + 'LeaveCalendar::updateFiltersByAbsenceType', []); + }); + }); }); }); From b8f2925add808101b8f57720d6c2ed8dfbacaa5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Wed, 30 May 2018 21:06:12 -0400 Subject: [PATCH 201/251] PCHR-3723: Add dist files --- .../js/angular/dist/absence-tab.min.js | 8 ++++---- .../js/angular/dist/admin-dashboard.min.js | 8 ++++---- .../js/angular/dist/manager-leave.min.js | 8 ++++---- .../js/angular/dist/my-leave.min.js | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 0f8bc211aeb..c2d05a9af4d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return o.loadAllLookUpContacts().then(function(e){s.lookupContacts=e}).then(o.loadContactIdsToReduceTo).then(function(e){s.contactIdsToReduceTo=e,s.contactIdsToReduceTo.push(s.contactId)}).then(o.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){for(var e=[],t=n(U.selectedPeriod.start_date).clone().startOf("month"),a=n(U.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(D(t)),t.add(1,"month");U.months=e}function f(e){return e.format("YYYY-MM")}function p(){s.$new().$watch(function(){return U.selectedMonthIndex},function(e,n){null!==n&&e!==n&&(x(),M(),k())})}function h(e){U.injectMonth=!0,E("injected").then(function(){k(e)}).then(function(){U.loading.calendar=!1})}function v(){B=t("LeaveCalendar"+e.capitalize(F)+"Controller").init(U)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return r.all().then(function(n){U.absencePeriods=e.sortBy(n,"start_date"),U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})}).then(m).then(O)}function _(){return c.all().then(c.loadCalculationUnits)}function y(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){U.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){U.filters.optionValues.regions=e.hrjc_region,U.filters.optionValues.locations=e.hrjc_location,U.filters.optionValues.levelTypes=e.hrjc_level_type,U.filters.optionValues.departments=e.hrjc_department})}function T(){return u.all()}function A(){return a.all([_(),T(),y()]).then(function(n){U.supportData.absenceTypes=n[0],U.supportData.publicHolidays=n[1],U.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,U.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,U.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,U.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return U.injectMonth&&(e=E("destroyed"),U.injectMonth=!1),e}function D(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function R(){var n=U.selectedPeriod.id;U.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current}),n!==U.selectedPeriod.id&&m(),O(),M(),w("month")}function I(e){var n="previous"===e?"subtract":"add";x(U.selectedMonth.moment[n](1,"month")),M(),w("month")}function w(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&m).then("period"===n&&L).then("contacts"===n&&q).then("month"===n&&M).then(function(){h("contacts"===n)})}function k(e){s.$emit("LeaveCalendar::showMonth",!!e)}function O(){x(n())}function L(){x(U.months[0].moment)}function S(t){var a="previous"===t?"first":"last",o=e[a](U.months),s=n().year(o.year).month(o.month);U.monthPaginatorsAvailability[t]=!U.selectedMonth.moment.isSame(s,"month")}function M(){S("previous"),S("next")}function x(n){n&&(U.selectedMonthIndex=f(n)),U.selectedMonth=e.find(U.months,{index:U.selectedMonthIndex})}function $(){return U.roleOverride?a.resolve().then(function(){F=U.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function E(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var B,F,U=this;U.absencePeriods=[],U.contacts=[],U.contactIdsToReduceTo=null,U.injectMonth=!1,U.months=[],U.selectedMonth={},U.selectedMonthIndex="",U.selectedPeriod=null,U.showContactName=!1,U.showFilters=!1,U.supportData={},U.loading={calendar:!0,page:!0},U.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},U.monthPaginatorsAvailability={previous:!0,next:!0},U.labelPeriod=b,U.navigateToCurrentMonth=R,U.paginateMonth=I,U.refresh=w,function(){$().then(p).then(v).then(P).then(function(){return a.all([g(),q(),A(),U.showFilters?C():e.noop])}).then(function(){h(),M()}).then(function(){U.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,n,t){function a(t,a,o){"use strict";function s(e,n,t,a,s){o.openModal(n,t,a,s)}function i(e){return e.isAM?"AM":e.isPM?"PM":""}function r(e){var t=n(e.from_date).isSame(h.date,"day"),a=n(e.to_date).isSame(h.date,"day");return t?n(e.from_date).format("HH:mm"):a?n(e.to_date).format("HH:mm"):""}function c(n,t){h.contactData.leaveRequestsAttributes[n.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:n.type_id}).title}function u(n,t){var a=e.find(h.supportData.absenceTypes,{id:n.type_id}),o=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});t.unit=o.name}function l(e,t){t.from_date=n(e.from_date).toDate(),t.to_date=n(e.to_date).toDate()}function d(n,t){"days"===t.unit&&(t.from_date_type=e.find(h.supportData.dayTypes,{value:n.from_date_type}).label,t.to_date_type=e.find(h.supportData.dayTypes,{value:n.to_date_type}).label)}function m(e,n){var t="";t=n.isAccruedTOIL?"AT":"days"===n.unit?i(n):r(e),n.label=t}function f(e){var n=h.contactData.leaveRequestsAttributes[e.id];[u,d,m,l,c].forEach(function(t){t.call(this,e,n)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}t.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=s,function(){p()}()}t.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,n){function t(n,t){function a(n){var t=e.includes(c.absenceTypesToFilterBy,n);return!c.absenceTypesToFilterBy.length||t}function o(e){return{backgroundColor:e.color}}function s(){t.$new().$watch(function(){return c.absenceTypesToFilterBy},function(e,n){e!==n&&t.$emit("LeaveCalendar::updateFiltersByAbsenceType",c.absenceTypesToFilterBy)},!0)}function i(){c.absenceTypesToFilterBy=[]}function r(n){ -e.includes(c.absenceTypesToFilterBy,n)?e.remove(c.absenceTypesToFilterBy,function(e){return n===e}):c.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var c=this;c.absenceTypesToFilterBy=[],c.legendCollapsed=!1,c.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],c.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],c.checkIfAbsenceTypeIsSelectedForFiltering=a,c.getAbsenceTypeStyle=o,c.resetFilteringByAbsenceTypes=i,c.toggleFilteringByAbsenceType=r,function(){s()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){q([e]),j(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(z.period.start_date)&&o.isSameOrBefore(z.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return G[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(n){var t=Object.keys(V[n.id]||{}).length,a=e.includes(z.showTheseContacts,n.id);return t||a}):z.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(M(n),j(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(V[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:U(t),isAccruedTOIL:A(t,"toil"),isRequested:D(t),isAM:T("half_day_am",t,e.date),isPM:T("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function y(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function q(e){return e.forEach(function(e){var n=R(e);V[e.contact_id]=V[e.contact_id]||{},n.forEach(function(n){V[e.contact_id][n.date]||(V[e.contact_id][n.date]=[]),V[e.contact_id][n.date].push(e)})}),a.resolve()}function C(){Y.push(o.$on("LeaveCalendar::showMonth",B)),Y.push(r.subscribe("LeaveRequest::new",u)),Y.push(r.subscribe("LeaveRequest::edit",N)),Y.push(r.subscribe("LeaveRequest::updatedByManager",N)),Y.push(r.subscribe("LeaveRequest::delete",h)),Y.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){W=n,B(e,!0)})}function T(e,t,a){var o=z.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function A(e,n){return e.request_type===n}function P(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function D(n){var t=z.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function R(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===z.month.month&&o.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function I(n){var t=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function w(){return[I(c.statusNames.approved),I(c.statusNames.adminApproved),I(c.statusNames.awaitingApproval),I(c.statusNames.moreInformationRequired)]}function k(){return z.month.loading=!0,a.all([L(),O()]).then(S).then(E).then(function(){H=!0,z.month.loading=!1})}function O(){var n={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:w()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:W.length?W:e.pluck(z.supportData.absenceTypes,"id")}};return i.all(n,null,null,null,!1).then(function(e){return V={},q(e.list)})}function L(){var n=z.month.days[0].date,t=z.month.days[z.month.days.length-1].date;return s.get(z.contacts.map(function(e){return e.id}),n,t).then(function(n){G=e.indexBy(n,"contact_id")})}function S(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(n){return e.includes(z.contactIdsToReduceTo,n.contact_id)||e.find(V,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function M(n){var t=R(n);V[n.contact_id]=V[n.contact_id]||{},t.forEach(function(t){e.remove(V[n.contact_id][t.date],function(e){return e.id===n.id})})}function x(){o.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function $(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return V[t]&&V[t][n.date]?V[t][n.date]:[]}).then(function(a){a=F(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(n,a)})})}function E(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(n){return $(e,n.id)}))}))}function B(e,n){z.currentPage=0,z.visible=!0,(n||!H)&&k()}function F(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(T("half_day_pm",e,e.from_date)?1:0)})}function U(n){var t=e.find(z.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(P).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(P)}function P(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function D(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(P).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=P,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(D).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(P).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function P(){e.forEach(I,function(e){e()})}function D(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=P,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function P(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function D(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([P(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={}, -G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([P(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(D)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function P(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return D(e).then(function(){k(e,!0)})})}function D(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),D("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?D("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=P,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function P(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function D(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),D())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=P,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null),id:{IN:t.filters.userSettings.contact?[t.filters.userSettings.contact.id]:t.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function P(){["from","to"].forEach(A)}function D(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){De={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:De.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){D(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(De.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),P(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?Pe():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Pe(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var De,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){ -return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var n="previous"===e?"subtract":"add";$(N.selectedMonth.moment[n](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT, +G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()} +n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index f41c4a70c1f..71d49b9aad2 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),E(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&E).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function E(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function L(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){L().then(p).then(v).then(w).then(function(){return a.all([g(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),E()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,n){n.from_date=t(e.from_date).toDate(),n.to_date=t(e.to_date).toDate()}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(E(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function L(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return L(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{ -title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){ -return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x, -Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0, +allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date, +i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={}, +Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index b4e9a2cfb80..b0bd0ea5444 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function m(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function b(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(f).then(O)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return j.loadContacts().then(function(e){F.contacts=e})}function $(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function A(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function w(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:m(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&f(),O(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";M(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(w).then("period"===t&&f).then("period"===t&&I).then("contacts"===t&&q).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function O(){M(t())}function I(){M(F.months[0].moment)}function x(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){x("previous"),x("next")}function M(t){t&&(F.selectedMonthIndex=m(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function E(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=g,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){E().then(p).then(v).then(w).then(function(){return a.all([b(),q(),A(),F.showFilters?$():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,n){n.from_date=t(e.from_date).toDate(),n.to_date=t(e.to_date).toDate()}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function f(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function m(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,f,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(m)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){q([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function f(e){return Y[e]}function m(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=g(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function g(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function b(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:A(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function q(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function $(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function A(e,t){return e.request_type===t}function w(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([I(),O()]).then(x).then(k).then(function(){W=!0,z.month.loading=!1})}function O(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},q(e.list)})}function I(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function x(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function E(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:w(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return E(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}), -define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times -;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1, -Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict" +;return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)} +function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1, +Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 9505dbe0834..de5e08c2486 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?R:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:R(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return r.loadAllLookUpContacts().then(function(e){o.lookupContacts=e}).then(r.loadContactIdsToReduceTo).then(function(e){o.contactIdsToReduceTo=e,o.contactIdsToReduceTo.push(o.contactId)}).then(r.loadFilteredContacts)}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){for(var e=[],n=t(F.selectedPeriod.start_date).clone().startOf("month"),a=t(F.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(T(n)),n.add(1,"month");F.months=e}function f(e){return e.format("YYYY-MM")}function p(){o.$new().$watch(function(){return F.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),L(),S())})}function h(e){F.injectMonth=!0,k("injected").then(function(){S(e)}).then(function(){F.loading.calendar=!1})}function v(){j=n("LeaveCalendar"+e.capitalize(B)+"Controller").init(F)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function g(){return i.all().then(function(t){F.absencePeriods=e.sortBy(t,"start_date"),F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function y(){return u.all().then(u.loadCalculationUnits)}function _(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return j.loadContacts().then(function(e){F.contacts=e})}function q(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){F.filters.optionValues.regions=e.hrjc_region,F.filters.optionValues.locations=e.hrjc_location,F.filters.optionValues.levelTypes=e.hrjc_level_type,F.filters.optionValues.departments=e.hrjc_department})}function C(){return c.all()}function w(){return a.all([y(),C(),_()]).then(function(t){F.supportData.absenceTypes=t[0],F.supportData.publicHolidays=t[1],F.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,F.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,F.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,F.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function A(){var e=a.resolve();return F.injectMonth&&(e=k("destroyed"),F.injectMonth=!1),e}function T(e){return{index:f(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=F.selectedPeriod.id;F.selectedPeriod=e.find(F.absencePeriods,function(e){return!!e.current}),t!==F.selectedPeriod.id&&m(),I(),L(),R("month")}function D(e){var t="previous"===e?"subtract":"add";E(F.selectedMonth.moment[t](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(A).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&L).then(function(){h("contacts"===t)})}function S(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(F.months[0].moment)}function O(n){var a="previous"===n?"first":"last",r=e[a](F.months),o=t().year(r.year).month(r.month);F.monthPaginatorsAvailability[n]=!F.selectedMonth.moment.isSame(o,"month")}function L(){O("previous"),O("next")}function E(t){t&&(F.selectedMonthIndex=f(t)),F.selectedMonth=e.find(F.months,{index:F.selectedMonthIndex})}function M(){return F.roleOverride?a.resolve().then(function(){B=F.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){ -B=e[0]?"admin":e[1]?"manager":"staff"})}function k(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var j,B,F=this;F.absencePeriods=[],F.contacts=[],F.contactIdsToReduceTo=null,F.injectMonth=!1,F.months=[],F.selectedMonth={},F.selectedMonthIndex="",F.selectedPeriod=null,F.showContactName=!1,F.showFilters=!1,F.supportData={},F.loading={calendar:!0,page:!0},F.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},F.monthPaginatorsAvailability={previous:!0,next:!0},F.labelPeriod=b,F.navigateToCurrentMonth=P,F.paginateMonth=D,F.refresh=R,function(){M().then(p).then(v).then(A).then(function(){return a.all([g(),$(),w(),F.showFilters?q():e.noop])}).then(function(){h(),L()}).then(function(){F.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",roleOverride:"@?"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar.html"}],controllerAs:"calendar",controller:["$controller","$q","$log","$rootScope","shared-settings","AbsencePeriod","AbsenceType","PublicHoliday","OptionGroup","checkPermissions",a]})}),define("leave-absences/shared/components/leave-calendar-day.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n,a,r){"use strict";function o(e,t,n,a,o){r.openModal(t,n,a,o)}function s(e){return e.isAM?"AM":e.isPM?"PM":""}function i(e){var n=t(e.from_date).isSame(h.date,"day"),a=t(e.to_date).isSame(h.date,"day");return n?t(e.from_date).format("HH:mm"):a?t(e.to_date).format("HH:mm"):""}function u(t,n){h.contactData.leaveRequestsAttributes[t.id].absenceTypeTitle=e.find(h.supportData.absenceTypes,{id:t.type_id}).title}function c(t,n){var a=e.find(h.supportData.absenceTypes,{id:t.type_id}),r=e.find(h.supportData.calculationUnits,{value:a.calculation_unit});n.unit=r.name}function l(e,n){n.from_date=t(e.from_date).toDate(),n.to_date=t(e.to_date).toDate()}function d(t,n){"days"===n.unit&&(n.from_date_type=e.find(h.supportData.dayTypes,{value:t.from_date_type}).label,n.to_date_type=e.find(h.supportData.dayTypes,{value:t.to_date_type}).label)}function m(e,t){var n="";n=t.isAccruedTOIL?"AT":"days"===t.unit?s(t):i(e),t.label=n}function f(e){var t=h.contactData.leaveRequestsAttributes[e.id];[c,d,m,l,u].forEach(function(n){n.call(this,e,t)})}function p(){a.$watch("day.contactData.leaveRequests",function(){h.contactData&&h.contactData.leaveRequests&&h.contactData.leaveRequests.forEach(f)},!0)}n.debug("Component: leave-calendar-day");var h=this;h.openLeavePopup=o,function(){p()}()}n.component("leaveCalendarDay",{bindings:{contactData:"<",date:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-day.html"}],controllerAs:"day",controller:a}),a.$inject=["$log","$scope","LeavePopup"]}),define("leave-absences/shared/components/leave-calendar-legend.component",["common/lodash","leave-absences/shared/modules/components"],function(e,t){function n(t,n){function a(t){var n=e.includes(u.absenceTypesToFilterBy,t);return!u.absenceTypesToFilterBy.length||n}function r(e){return{backgroundColor:e.color}}function o(){n.$new().$watch(function(){return u.absenceTypesToFilterBy},function(e,t){e!==t&&n.$emit("LeaveCalendar::updateFiltersByAbsenceType",u.absenceTypesToFilterBy)},!0)}function s(){u.absenceTypesToFilterBy=[]}function i(t){e.includes(u.absenceTypesToFilterBy,t)?e.remove(u.absenceTypesToFilterBy,function(e){return t===e}):u.absenceTypesToFilterBy.push(t)}t.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIsSelectedForFiltering=a,u.getAbsenceTypeStyle=r,u.resetFilteringByAbsenceTypes=s,u.toggleFilteringByAbsenceType=i,function(){o()}()}t.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:n}),n.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(e){$([e]),U(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(n){var a=t(),r=n.clone().startOf("month");return e.map(e.times(n.daysInMonth()),function(){var e={date:r.format("YYYY-MM-DD"),name:r.format("ddd"),index:r.format("D"),current:a.isSame(r,"day"),enabled:r.isSameOrAfter(z.period.start_date)&&r.isSameOrBefore(z.period.end_date),contactsData:{}};return r.add(1,"day"),e})}function m(e){return Y[e]}function f(){return z.showOnlyWithLeaveRequests?z.contacts.filter(function(t){var n=Object.keys(G[t.id]||{}).length,a=e.includes(z.showTheseContacts,t.id);return n||a}):z.contacts}function p(e){return t(e,u.serverDateFormat)}function h(e){var t=b(e);t&&(L(t),U(t))}function v(t){var n={request_type:"toil"};return e.some(t,n)&&!e.every(t,n)?e.filter(t,n):t}function b(t){var n;return e.find(G[t.contact_id],function(a){return n=e.find(a,function(e){return+e.id==+t.id})}),n}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(e,n){var a={};return n.forEach(function(n){a[n.id]={styles:F(n),isAccruedTOIL:w(n,"toil"),isRequested:T(n),isAM:C("half_day_am",n,e.date),isPM:C("half_day_pm",n,e.date),isSingleDay:t(n.from_date).isSame(n.to_date,"day")}}),a}function _(){z.supportData.dayTypes=e.indexBy(z.supportData.dayTypes,"name"),z.supportData.leaveRequestStatuses=e.indexBy(z.supportData.leaveRequestStatuses,"value"),z.supportData.publicHolidays=e.transform(z.supportData.publicHolidays,function(e,t){e[p(t.date).valueOf()]=t},{})}function $(e){return e.forEach(function(e){var t=P(e);G[e.contact_id]=G[e.contact_id]||{},t.forEach(function(t){G[e.contact_id][t.date]||(G[e.contact_id][t.date]=[]),G[e.contact_id][t.date].push(e)})}),a.resolve()}function q(){V.push(r.$on("LeaveCalendar::showMonth",j)),V.push(i.subscribe("LeaveRequest::new",c)),V.push(i.subscribe("LeaveRequest::edit",N)),V.push(i.subscribe("LeaveRequest::updatedByManager",N)),V.push(i.subscribe("LeaveRequest::delete",h)),V.push(i.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):N(e.leaveRequest)})),r.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,t){H=t,j(e,!0)})}function C(e,n,a){var r=z.supportData.dayTypes[e];return t(a).isSame(n.from_date,"day")?r.value===n.from_date_type:t(a).isSame(n.to_date,"day")?r.value===n.to_date_type:void 0}function w(e,t){return e.request_type===t}function A(e){return!!z.supportData.publicHolidays[p(e).valueOf()]}function T(t){var n=z.supportData.leaveRequestStatuses[t.status_id].name;return e.contains([u.statusNames.awaitingApproval,u.statusNames.moreInformationRequired],n)}function P(n){for(var a=[],r=t(n.from_date).clone(),o=t(n.to_date);r.isSameOrBefore(o);)r.month()===z.month.month&&r.year()===z.month.year&&a.push(e.find(z.month.days,function(e){return e.date===r.format("YYYY-MM-DD")})),r.add(1,"day");return a}function D(t){var n=e.find(z.supportData.leaveRequestStatuses,function(e){return e.name===t});return n?n.value:null}function R(){return[D(u.statusNames.approved),D(u.statusNames.adminApproved),D(u.statusNames.awaitingApproval),D(u.statusNames.moreInformationRequired)]}function S(){return z.month.loading=!0,a.all([x(),I()]).then(O).then(k).then(function(){W=!0,z.month.loading=!1})}function I(){var t={from_date:{to:z.month.days[z.month.days.length-1].date+" 23:59:59"},to_date:{from:z.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:z.contacts.map(function(e){return e.id})},type_id:{IN:H.length?H:e.pluck(z.supportData.absenceTypes,"id")}};return s.all(t,null,null,null,!1).then(function(e){return G={},$(e.list)})}function x(){var t=z.month.days[0].date,n=z.month.days[z.month.days.length-1].date;return o.get(z.contacts.map(function(e){return e.id}),t,n).then(function(t){Y=e.indexBy(t,"contact_id")})}function O(){return z.contactIdsToReduceTo&&(z.contacts=z.contacts.filter(function(t){return e.includes(z.contactIdsToReduceTo,t.contact_id)||e.find(G,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=P(t);G[t.contact_id]=G[t.contact_id]||{},n.forEach(function(n){e.remove(G[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function M(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:A(t.date)})}),o.then(function(){return G[n]&&G[n][t.date]?G[n][t.date]:[]}).then(function(a){a=B(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(t,a)})})}function k(){return a.all(z.month.days.map(function(e){return a.all(z.contacts.map(function(t){return M(e,t.id)}))}))}function j(e,t){z.currentPage=0,z.visible=!0,(t||!W)&&S()}function B(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(C("half_day_pm",e,e.from_date)?1:0)})}function F(t){var n=e.find(z.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function m(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||S.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=A,S.canRemoveAttachment=w,S.canSubmit=d,S.canUploadMore=m,S.formatDateTime=f,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),$()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return R("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{ -in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function R(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function S(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return R("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return R("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return R("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([S(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),O(),B()}function S(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){return{department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null),id:{IN:n.filters.userSettings.contact?[n.filters.userSettings.contact.id]:n.lookupContacts.map(function(e){return e.id})}}}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Re,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Re=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=R,Ee.canSubmit=S,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){ -return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function x(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=x(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=x(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),x())})}function v(e){N.injectMonth=!0,j("injected").then(function(){x(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),I(),E(),R("month")}function S(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function x(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride +}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),x("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=x,te.isLeaveType=I,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0 +})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function x(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function x(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function I(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:xe}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(Ie)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,x(),A(),Ee.request.isValid().then(ee()&&I).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Se={},Re=[],xe="",Ie="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug, +pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file From 2726d7d3343e88484764dac1c945ad9f130539dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Thu, 31 May 2018 08:58:51 -0400 Subject: [PATCH 202/251] PCHR-3723: Move "Leave" legend to day type rows; do not make it filterable --- .../css/leaveandabsence.css | 2 +- .../js/angular/dist/absence-tab.min.js | 8 ++--- .../js/angular/dist/admin-dashboard.min.js | 8 ++--- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 10 +++---- .../leave-calendar-legend.component.js | 14 ++++++++- .../leave-calendar-legend.component.spec.js | 29 ++++++++++--------- .../scss/components/_leave-calendar.scss | 5 ++++ .../components/leave-calendar-legend.html | 6 +++- 9 files changed, 54 insertions(+), 30 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css index c3038ac8700..e4ead5f5ccf 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/css/leaveandabsence.css @@ -1 +1 @@ -#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-selected,#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-clickable:hover{border:solid 1px #fff;border-radius:4px;box-shadow:0 0 1px 0 #c7cbd0;height:26px;margin-bottom:-1px;margin-left:-2px;margin-right:9px;margin-top:9px;padding-left:9px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__reset-absence-types-filter{color:#464354}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} +#bootstrap-theme .chr_disabled{opacity:0.5;pointer-events:none}#bootstrap-theme .table-condensed>thead>tr>th{background:#fff !important;padding:8px 5px}#bootstrap-theme .table-condensed-mixed>thead>tr>th,#bootstrap-theme .table-condensed-mixed>thead>tr>td,#bootstrap-theme .table-condensed-mixed>tbody>tr>th,#bootstrap-theme .table-condensed-mixed>tbody>tr>td{padding-left:5px;padding-right:5px}#bootstrap-theme .table-condensed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed>thead>tr>td:first-child,#bootstrap-theme .table-condensed>thead>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:first-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:first-child{padding-left:20px}#bootstrap-theme .table-condensed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed>thead>tr>td:last-child,#bootstrap-theme .table-condensed>thead>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>tbody>tr>th:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>td:last-child,#bootstrap-theme .table-condensed-mixed>thead>tr>th:last-child{padding-right:20px}#bootstrap-theme .table-nested{overflow-y:hidden;position:relative}#bootstrap-theme .table-nested:before{box-shadow:inset 0px 6px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;top:0;width:100%;z-index:10}#bootstrap-theme .table-nested:after{box-shadow:inset 0px -4px 9px -6px rgba(0,0,0,0.2);content:'';display:block;height:10px;left:0;position:absolute;bottom:0;width:100%;z-index:10}#bootstrap-theme .table-nested>table,#bootstrap-theme .table-nested>.table{background-color:#fff}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>table>thead>tr>td:first-child,#bootstrap-theme .table-nested>table>thead>tr>th:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child{padding-left:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>table>thead>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>tbody>tr>th:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>td:first-child:before,#bootstrap-theme .table-nested>.table>thead>tr>th:first-child:before{background:#c2cfd8;content:'';display:block;height:110%;left:0;position:absolute;top:0;width:10px;z-index:2}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>table>thead>tr>td:last-child,#bootstrap-theme .table-nested>table>thead>tr>th:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child{padding-right:30px;position:relative}#bootstrap-theme .table-nested>table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>table>thead>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>tbody>tr>th:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>td:last-child:after,#bootstrap-theme .table-nested>.table>thead>tr>th:last-child:after{background:#c2cfd8;content:'';display:block;height:110%;right:0;position:absolute;top:0;width:10px;z-index:2}@media screen and (max-width: 767px){#bootstrap-theme .table-nested.table-responsive{border:0;margin-bottom:0}}#bootstrap-theme .table-nested-cell{padding:0 !important}#bootstrap-theme .chr_absence-work-pattern__add-custom{margin-bottom:20px}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(1){width:40%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(2){width:15%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(3){width:35%}#bootstrap-theme .chr_absence-work-pattern__custom-work-pattern td:nth-child(4){width:10%}#bootstrap-theme .chr_absence-work-pattern__work-pattern-listing{display:inline-block}#bootstrap-theme .chr_absence-work-pattern__alert{margin-bottom:0 !important}#bootstrap-theme .annual-entitlement-change-log-component thead td{min-width:100px}#bootstrap-theme .annual-entitlement-change-log-component thead .annual-entitlement-change-log-component__comments{min-width:300px}#bootstrap-theme .chr_annual-entitlements__period{width:130px}#bootstrap-theme .chr_annual-entitlements__edit-entitlements{width:150px}#bootstrap-theme .chr_contract-entitlements__position{width:140px}@media (max-width: 992px){#bootstrap-theme .chr_leave-balance-tab .chr_leave-balance-tab__filter:not(:last-child){padding-bottom:15px}}#bootstrap-theme .chr_leave-balance-tab__body{padding:0}#bootstrap-theme .chr_leave-calendar__admin-filters-hint{display:inline-block;font-size:20px;vertical-align:middle}#bootstrap-theme .chr_leave-calendar__admin-filters-select{display:inline-block;margin-right:20px;width:calc(100% - 50px)}#bootstrap-theme .chr_leave-calendar__dates-container{overflow-x:auto}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__dates-container .chr_leave-calendar{table-layout:fixed}}#bootstrap-theme .chr_leave-calendar__day{font-size:10px !important;line-height:1.4em !important;padding:10px !important;text-align:center !important}@media (min-width: 1200px){#bootstrap-theme .chr_leave-calendar__day{padding:10px 0 !important}}#bootstrap-theme .chr_leave-calendar__day--disabled{opacity:0.5}#bootstrap-theme .chr_leave-calendar__day--current{color:#0071bd !important}#bootstrap-theme .chr_leave-calendar__day-container--type--non-working{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__day-container--type--public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__day-container--type--weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__day-container{height:100%}#bootstrap-theme .chr_leave-calendar__item{color:#fff;display:block;font-size:10px;height:100%;position:relative;text-align:center;text-transform:uppercase;width:100%}#bootstrap-theme .chr_leave-calendar__item>span{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;height:1.2em}#bootstrap-theme .chr_leave-calendar__item>.chr_leave-calendar__time-unit{font-size:7px;height:1em;margin-left:-1px}#bootstrap-theme .chr_leave-calendar__item>a{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;cursor:pointer}#bootstrap-theme .chr_leave-calendar__item--half{height:50%}#bootstrap-theme .chr_leave-calendar__item--half:not(:first-child){height:calc(50% - 1px);margin-top:1px}#bootstrap-theme .chr_leave-calendar__item--more{border:2px solid #d3dee2}#bootstrap-theme .chr_leave-calendar__item--more .chr_leave-calendar__item__label{color:#4d4d69}#bootstrap-theme .chr_leave-calendar__item--disabled{cursor:not-allowed;opacity:0.5}#bootstrap-theme .chr_leave-calendar__item--type--late{background-color:#eca67e;border-color:#eca67e}#bootstrap-theme .chr_leave-calendar__item--alt{background-color:#fff !important;border:2px solid transparent;color:#464354}#bootstrap-theme .chr_leave-calendar__item--requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.3), rgba(255,255,255,0.3) 5px, transparent 5px, transparent 7px)}#bootstrap-theme .chr_leave-calendar__item--requested.chr_leave-calendar__item--alt{background:repeating-linear-gradient(45deg, #fff, #fff 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important}#bootstrap-theme .chr_leave-calendar__items>td{height:35px;overflow:hidden}#bootstrap-theme .chr_leave-calendar__items .chr_leave-calendar__items_day-cell{padding:0 !important}#bootstrap-theme .chr_leave-calendar__items leave-calendar-day{display:block;height:100%}#bootstrap-theme .chr_leave-calendar__legend__title{font-size:12px}#bootstrap-theme .chr_leave-calendar__legend__header:not(:first-child){margin-top:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{float:left;line-height:24px;margin-top:10px;white-space:nowrap}#bootstrap-theme .chr_leave-calendar__legend__other-badge-wrapper{margin-right:20px}#bootstrap-theme .chr_leave-calendar__legend__type-badge,#bootstrap-theme .chr_leave-calendar__legend__other-badge{color:#4d4d69;height:24px}#bootstrap-theme .chr_leave-calendar__legend__type-badge{border-radius:2px;color:#fff;margin-right:10px;margin-top:10px;padding:0 8px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-weekend{background-color:#c7cbd0}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-non-working-day{background-color:#41afcb}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-public-holiday{background-color:#8ec68a}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-generic-leave{background-color:#4d4d68}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-selected,#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-clickable:hover{border:solid 1px #fff;border-radius:4px;box-shadow:0 0 1px 0 #c7cbd0;height:26px;margin-bottom:-1px;margin-left:-2px;margin-right:9px;margin-top:9px;padding-left:9px}#bootstrap-theme .chr_leave-calendar__legend__type-badge.chr_leave-calendar__legend__type-badge-not-selected{opacity:0.4}#bootstrap-theme .chr_leave-calendar__legend__reset-absence-types-filter{color:#464354}#bootstrap-theme .chr_leave-calendar__legend__other-badge{border:solid 1px #d3dee2;border-radius:2px;float:left;font-size:12px;font-weight:600;margin-right:10px;text-align:center;width:24px}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-hours{font-size:6px;font-weight:400}#bootstrap-theme .chr_leave-calendar__legend__other-badge.chr_leave-calendar__legend__other-badge-requested{background:repeating-linear-gradient(45deg, rgba(255,255,255,0.6), rgba(255,255,255,0.6) 5px, transparent 5px, transparent 7px);background-color:#d3dee2 !important;border:0}#bootstrap-theme .chr_leave-calendar__month-container{margin:0}#bootstrap-theme .chr_leave-calendar__month-container>div{padding:0}#bootstrap-theme .chr_leave-calendar__month-header{background:#f3f6f7}#bootstrap-theme .chr_leave-calendar__month-header .panel-title{font-size:16px}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month{text-transform:uppercase}#bootstrap-theme .chr_leave-calendar__month-header__go-to-current-month,#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{margin-right:10px}#bootstrap-theme .chr_leave-calendar__month-header__month-paginator{color:#464354;padding-left:0;padding-right:0}#bootstrap-theme .chr_leave-calendar__name{font-size:12px !important;line-height:100%;padding:0 20px !important;text-align:left;text-overflow:ellipsis;width:100%}#bootstrap-theme .chr_leave-calendar__name_header,#bootstrap-theme .chr_leave-calendar__day{height:49px}#bootstrap-theme .chr_leave-calendar__name_header{padding-bottom:10px !important}#bootstrap-theme .chr_leave-calendar__name_cell{vertical-align:middle !important}#bootstrap-theme .chr_leave-calendar__names-container .chr_leave-calendar{table-layout:fixed}#bootstrap-theme .chr_leave-calendar__pagination{font-size:10px;text-align:center}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']{line-height:1em;outline:none;padding:0}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'] .fa{color:#555}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn'][disabled] .fa{opacity:0.5}#bootstrap-theme .chr_leave-calendar__pagination [class*='btn']:hover:not([disabled]) .fa{color:#464354}#bootstrap-theme .chr_leave-calendar__pagination-next{border-top:0}#bootstrap-theme .chr_leave-calendar__pagination-next th{height:24px;padding:4px 0 6px !important}#bootstrap-theme .chr_leave-calendar__pagination-next .chr_leave-calendar__pagination{padding-right:3px !important}#bootstrap-theme .chr_leave-report .dropdown-toggle{color:#464354;padding:0 10px}#bootstrap-theme .chr_leave-report .dropdown-toggle:hover{background:#e6e6e6}#bootstrap-theme .chr_leave-report table{table-layout:fixed}#bootstrap-theme .chr_leave-report table thead th,#bootstrap-theme .chr_leave-report table tbody td{padding:8px 5px}#bootstrap-theme .chr_leave-report__label{color:#464354;font-weight:700}#bootstrap-theme .chr_leave-report__label>.fa{margin-right:5px}#bootstrap-theme .chr_leave-report__label--toggle{cursor:pointer;user-select:none}#bootstrap-theme .chr_leave-report__heading{background-color:#f3f6f7;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_leave-report__heading .chr_leave-report__export-button{line-height:2.4}#bootstrap-theme .chr_leave-report__table table,#bootstrap-theme .chr_leave-report__table .table{border-collapse:separate}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-top-width:0}#bootstrap-theme .chr_leave-report__table table>thead+tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>thead+tbody>tr:first-child>td{border-top-width:1px}#bootstrap-theme .chr_leave-report__table table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table:not(.table-bordered):not(.table-condensed)>tbody>tr:first-child>td{border-color:#f3f6f7}#bootstrap-theme .chr_leave-report__table table>thead>tr>th,#bootstrap-theme .chr_leave-report__table .table>thead>tr>th{background:#f3f6f7;border-bottom:0;color:#464354;text-transform:capitalize}#bootstrap-theme .chr_leave-report__table table>tbody>tr:first-child>td,#bootstrap-theme .chr_leave-report__table .table>tbody>tr:first-child>td{border-color:#e8eef0 !important}#bootstrap-theme .chr_leave-report__table table>tfoot>tr,#bootstrap-theme .chr_leave-report__table .table>tfoot>tr{background:#f3f6f7}#bootstrap-theme .chr_leave-report__table>table>thead>tr>th,#bootstrap-theme .chr_leave-report__table>.table>thead>tr>th{padding-bottom:13px;padding-top:13px}#bootstrap-theme .chr_leave-report__table-container{overflow:auto}#bootstrap-theme .chr_leave-report__table-container .panel{display:inline-block;min-width:100%}#bootstrap-theme .chr_leave-report__table__heading--action{width:45px}#bootstrap-theme .chr_leave-report__table__heading--label{width:280px}#bootstrap-theme .chr_leave-report__table__heading--dates{width:170px}#bootstrap-theme .chr_leave-report__table__heading--status{width:180px}#bootstrap-theme .chr_leave-report__table__heading--type{width:65px;word-break:break-word}#bootstrap-theme .chr_leave-request-comment{margin-top:10px}#bootstrap-theme .chr_leave-request-comment__text{border-bottom:1px solid #e8eef0;color:#c2cfd8;margin-right:10px;padding-bottom:20px}#bootstrap-theme .chr_leave-request-files_list{height:150px;overflow-y:auto;margin-top:20px;margin-bottom:20px}#bootstrap-theme .chr_leave-request-files_meta{margin-bottom:10px}#bootstrap-theme .chr_leave-request-files_upload{border:dashed 1px #464354;padding:20px}#bootstrap-theme .chr_leave-request-files_upload_action{padding:5px}#bootstrap-theme .chr_leave-request-files_file-name{display:inline-block;max-width:240px;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}#bootstrap-theme .chr_leave-request-files_delete{margin-top:-7px}#bootstrap-theme .chr_leave-request-modal .modal-title{font-size:18px !important}#bootstrap-theme .chr_leave-request-modal .table-responsive{border:0}#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container .input-group{width:100%}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal .chr_leave-request-date-picker-container{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal__chevron{font-size:0.6em;margin-right:5px;vertical-align:middle}#bootstrap-theme .chr_leave-request-modal__comments{height:230px;margin-bottom:20px;overflow:auto}#bootstrap-theme .chr_leave-request-modal__comments_empty{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__footer{margin:0}#bootstrap-theme .chr_leave-request-modal__delete{margin-left:15px;margin-top:8px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container{margin-bottom:20px}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container ul{opacity:1 !important}#bootstrap-theme .chr_leave-request-modal__form .ui-select-container:not(.ui-select-multiple) input{width:100% !important}#bootstrap-theme .chr_leave-request-modal__form-group,#bootstrap-theme .chr_leave-request-modal__required-documents>div{margin-bottom:15px}#bootstrap-theme .chr_leave-request-modal__response{padding:20px 20px 0}#bootstrap-theme .chr_leave-request-modal__response label{font-size:17px;margin-top:-3px}#bootstrap-theme .chr_leave-request-modal__response .chr_wysiwyg{margin-top:15px}#bootstrap-theme .chr_leave-request-modal__required-documents input{margin-right:5px}#bootstrap-theme .chr_leave-request-modal__small_spinner>div.chr_spinner{margin-top:18px;min-height:initial}#bootstrap-theme .chr_leave-request-modal__tab input[uib-datepicker-popup]{font-size:13px}#bootstrap-theme .chr_leave-request-modal__table{border:1px solid #f3f6f7;margin-bottom:15px !important}#bootstrap-theme .chr_leave-request-modal__user-info{font-size:17px;padding:20px}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(1){color:#464354}#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){color:#555}@media screen and (min-width: 480px){#bootstrap-theme .chr_leave-request-modal__user-info>span:nth-child(2){border-left:1px solid #e8eef0}}#bootstrap-theme .chr_leave-request-modal__span-expiry{display:inline-block;margin-top:7px}#bootstrap-theme .chr_leave-request-modal__expiry-clear{position:absolute;right:3.5em;top:0.6em;z-index:2}#bootstrap-theme .chr_leave-request-modal__small-text{font-size:80%}#bootstrap-theme .chr_leave-request-modal__custom-deduction-toggling-row{margin-top:-5px}@media screen and (min-width: 768px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{text-align:right}}@media screen and (max-width: 767px){#bootstrap-theme .chr_leave-request-modal__custom-deduction-label{margin-bottom:10px}}#bootstrap-theme .chr_leave-request-modal .form-group{overflow:inherit !important}#bootstrap-theme .chr_leave-request-modal .alert{margin-bottom:0 !important}#bootstrap-theme .chr_leave-request-modal input[uib-datepicker-popup]{box-shadow:none !important;background-color:inherit !important;color:inherit !important;cursor:pointer !important;border-right:none}#bootstrap-theme leave-request-record-actions{display:block}#bootstrap-theme leave-request-record-actions .btn-group{float:left}#bootstrap-theme leave-request-record-actions .btn-group:first-child{margin-right:8px}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:auto;right:0}@media screen and (max-width: 767px){#bootstrap-theme leave-request-record-actions .btn-group{width:calc((100% - 8px) / 2)}#bootstrap-theme leave-request-record-actions .btn{padding-left:0;padding-right:0;width:100%}#bootstrap-theme leave-request-record-actions .btn-group:first-child .dropdown-menu{left:0;right:auto}}#bootstrap-theme .leave-widget h4{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px}#bootstrap-theme .leave-widget__types>table,#bootstrap-theme .leave-widget__sickness>table,#bootstrap-theme .leave-widget__next-leave>table{border:none}#bootstrap-theme .leave-widget__types>table thead tr th,#bootstrap-theme .leave-widget__sickness>table thead tr th,#bootstrap-theme .leave-widget__next-leave>table thead tr th{color:#4d4d69;font-size:13px;font-weight:normal;margin-bottom:0;padding-bottom:13px;background:none;width:35%}#bootstrap-theme .leave-widget__types>table thead tr th:first-child,#bootstrap-theme .leave-widget__sickness>table thead tr th:first-child,#bootstrap-theme .leave-widget__next-leave>table thead tr th:first-child{width:65%}#bootstrap-theme .leave-widget__types>table tbody tr td,#bootstrap-theme .leave-widget__sickness>table tbody tr td,#bootstrap-theme .leave-widget__next-leave>table tbody tr td{color:#0071bd;font-size:16px;font-weight:600;padding-bottom:9px}#bootstrap-theme .leave-widget__types>table tbody tr td:first-child,#bootstrap-theme .leave-widget__sickness>table tbody tr td:first-child,#bootstrap-theme .leave-widget__next-leave>table tbody tr td:first-child{color:#464354}#bootstrap-theme .leave-widget hr{border-color:#DEE4ED;margin-bottom:25px;margin-top:25px}#bootstrap-theme .leave-widget__sickness h4{margin-top:18px}#bootstrap-theme .leave-widget__next-leave h3{font-size:16px;margin-bottom:16px;margin-top:0}#bootstrap-theme .leave-widget__next-leave__deduction{font-size:16px;font-weight:600;color:#464354}#bootstrap-theme .chr_leave__page-selector-dropdown{margin-right:5px;position:relative;top:1px;width:100%}#bootstrap-theme .chr_leave__page-selector-dropdown select{height:40px}#bootstrap-theme .chr_leave__page-selector-dropdown .crm_custom-select__arrow{line-height:40px;width:40px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{margin-top:7px;display:inline-block}@media screen and (max-width: 992px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header>div:not(:last-child),#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__header .panel-title{padding-bottom:20px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{display:inline-block;margin-top:7px;white-space:nowrap}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter .fa{font-size:0.6em;margin-right:5px;margin-top:-2px;vertical-align:middle}@media screen and (max-width: 991px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__filter{margin-top:15px}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;border-bottom:1px solid #dadcde;margin:0;padding-top:15px}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>div:not(:last-child){padding-bottom:20px}}@media screen and (min-width: 992px) and (max-width: 1199px){#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header>.no_gutter{padding-bottom:0 !important}}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body{margin:0;padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class^="col-"],#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body [class*=" col-"]{padding:0}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__panel_body a{cursor:pointer}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container{padding-left:10px;padding-right:10px;background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__status_container>div{padding-left:15px;padding-right:15px}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .form-group{overflow:inherit !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel{background-image:none !important}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .panel-body,#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] .chr_vertical_tabs{background-color:#f7f7f9}#bootstrap-theme .chr_manage_leave_requests[data-role="admin"] input[type="search"]{width:100% !important}#bootstrap-theme .chr_manage_leave_requests .chr_manage_leave_requests__sub-header .checkbox{margin-top:5px}#bootstrap-theme .page-manager-leave .chr_manage_leave_requests .btn-sm{font-size:100% !important}#bootstrap-theme .chr_manager_calendar__header{padding-left:10px;padding-right:10px;padding-top:15px;margin:0;background-color:#f7f7f9;border-bottom:1px solid #dadcde}#bootstrap-theme .chr_manager_calendar__header>*{padding-left:10px !important;padding-right:10px !important}#bootstrap-theme .chr_manager_calendar__header .checkbox{margin:0}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__header>div:not(:last-child){padding-bottom:20px}}#bootstrap-theme .chr_manager_calendar__sub-header{padding-left:10px;padding-right:10px;background-color:#f7f7f9;margin:0}#bootstrap-theme .chr_manager_calendar__sub-header>*{padding-left:10px !important;padding-right:10px !important}@media screen and (max-width: 1199px){#bootstrap-theme .chr_manager_calendar__sub-header>div:not(:last-child){padding-bottom:20px}#bootstrap-theme .chr_manager_calendar__sub-header .ui-select-container{height:auto}}#bootstrap-theme .chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}#bootstrap-theme .chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}#bootstrap-theme .chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}#bootstrap-theme .time-amount-picker .crm_custom-select{display:inline-block;margin-right:2px}#bootstrap-theme .time-amount-picker .crm_custom-select:nth-child(2){margin-left:10px}#bootstrap-theme .absence-tab-page .tab-pane{padding:0 !important}#bootstrap-theme .absence-tab-page .tab-content{background-color:transparent !important}#bootstrap-theme .absence-tab-page leave-request-record-actions{margin-bottom:20px}#bootstrap-theme .crm-absence_type-form-block .crm-section .label{width:35%}#bootstrap-theme .crm-absence_type-form-block .crm-section .content{margin-left:40%}#bootstrap-theme .crm-absence_type-form-block .toil-option,#bootstrap-theme .crm-absence_type-form-block .carry-forward-option,#bootstrap-theme .crm-absence_type-form-block .toil-expiration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-duration,#bootstrap-theme .crm-absence_type-form-block .carry-forward-expiration-date{display:none}#bootstrap-theme .crm-absence_type-form-block .sp-replacer{padding:2px}#bootstrap-theme .crm-absence_type-form-block .sp-preview{height:15px;width:15px}#bootstrap-theme .crm-absence_type-form-block .sp-dd{height:0;line-height:15px;font-size:9px}.page-civicrm-leaveandabsences-dashboard .page-title,.page-civicrm-leaveandabsences-dashboard #branding{display:none !important}.page-civicrm-leaveandabsences-dashboard #page{margin:0;padding:0}.admin-dashboard-page{position:relative}.admin-dashboard-page .crm_page__topbar{height:65px}.admin-dashboard-page leave-request-record-actions{margin:12px 16px 0 0}.admin-dashboard-page .chr_admin-dashboard_side-nav{background-color:#fff;height:calc(100% - 12px);overflow:hidden;position:absolute;width:170px}.admin-dashboard-page .chr_admin-dashboard_side-nav .active{background:#e8eef0}.admin-dashboard-page .chr_admin-dashboard_content{float:right;margin:16px;margin-bottom:0;width:calc(100% - 170px - 16px * 2)}#bootstrap-theme #calculation-details{background:#fff}#bootstrap-theme #calculation-details .base-contractual-entitlement{color:#0071bd}#bootstrap-theme #calculation-details .working-days-to-work{color:#44cb7e}#bootstrap-theme #calculation-details .working-days-in-period{color:#e6ab5e}#bootstrap-theme #calculation-details .contract-1-pro-rata{color:#E6807F}#bootstrap-theme #calculation-details .contract-2-pro-rata{color:#797300}#bootstrap-theme #calculation-details .contract-3-pro-rata{color:#904E1E}#bootstrap-theme #calculation-details .contract-4-pro-rata{color:#0511B1}#bootstrap-theme #calculation-details .contract-5-pro-rata{color:#4B9609}#bootstrap-theme #calculation-details .calculation-pro-rata{color:#95c0ff}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body{padding-top:20px;padding-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body .row:first-child h3{margin-top:0}#bootstrap-theme .crm-leave-and-absences-form-block .panel-body h3{margin-bottom:20px}#bootstrap-theme .crm-leave-and-absences-form-block .panel-footer .crm-button:last-child{margin-right:0}#bootstrap-theme.crm-leave-and-balance-import .panel{background-color:#fff}#bootstrap-theme.crm-leave-and-balance-import .panel-header{position:relative}#bootstrap-theme.crm-leave-and-balance-import .panel-header h2{padding:10px 20px}#bootstrap-theme.crm-leave-and-balance-import .panel-body .row:not(:last-child){padding-bottom:2em}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats .label{display:none}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats label{font-weight:normal !important}#bootstrap-theme.crm-leave-and-balance-import .table.date-formats td{border:0;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block{box-shadow:none;padding:0}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table{margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th{padding:10px 20px;border-right:none}#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table th,#bootstrap-theme.crm-leave-and-balance-import .crm-activity_map_table-form-block #map-field table td{padding:5px}#bootstrap-theme.crm-leave-and-balance-import #preview-counts,#bootstrap-theme.crm-leave-and-balance-import #summary-counts{box-shadow:none;margin-bottom:2em;width:100%}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td{background-color:#f2dede !important;color:#cf3458}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a{color:#bd2d4e;font-weight:bold}#bootstrap-theme.crm-leave-and-balance-import #preview-counts tr.danger td a:hover,#bootstrap-theme.crm-leave-and-balance-import #summary-counts tr.danger td a:hover{color:#0062a4}#bootstrap-theme.manage-entitlements-form .wider-hr{margin-left:-20px;margin-right:-20px;border-width:2px}#bootstrap-theme.manage-entitlements-form .wider-row{margin-left:-20px;margin-right:-20px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters{padding:15px 0;text-align:center}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label{display:inline-block}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .override-filters label:before{display:none}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .absence-type-filter{margin-right:10px}#bootstrap-theme.manage-entitlements-form .entitlement-calculation-filters .col-sm-4:last-child{text-align:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list{margin-bottom:0}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .title{float:left;width:65%}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement-header .actions{float:right}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list tr.hidden{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .absence-type{color:#fff;display:inline-block;padding:5px}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .overridden-proposed-entitlement,#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .proposed-entitlement .calculation-unit{display:none}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .borderless-button{background-color:transparent;border:0;cursor:pointer}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .add-comment{font-size:1.1em}#bootstrap-theme.manage-entitlements-form .table.entitlement-calculation-list .comment-text{display:none}#bootstrap-theme.manage-entitlements-form .manage-entitlements-form__filters{padding-bottom:1em}#bootstrap-theme.manage-entitlements-form .table{background:#f9f9f9;border-top:1px solid #e8eef0;border-bottom:1px solid #e8eef0;margin-bottom:2em}#bootstrap-theme.manage-entitlements-form .table th{background:#f3f6f7 !important}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:#e4ebed !important;min-width:200px}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .row>div{display:table-cell;float:none;vertical-align:bottom}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .fa{color:#4d4d69}#bootstrap-theme.manage-entitlements-form .table th.proposed-entitlement-header .action-button-container{padding:0}#bootstrap-theme.manage-entitlements-form .table td.proposed-entitlement{border-left:1px solid #e8eef0;border-right:1px solid #e8eef0;background:white}#bootstrap-theme.manage-entitlements-form .table span.absence-type{border-radius:3px;padding:0 5px}#bootstrap-theme.manage-entitlements-form .table tbody .fa{color:#0071bd}#bootstrap-theme.manage-entitlements-form .crm-container .CRM_HRLeaveAndAbsences_Form_ManageEntitlements .crm-button-type-next{float:right !important}#bootstrap-theme.manage-entitlements-form .panel-footer{border-top:none}#add-comment-dialog{display:none}#add-comment-dialog .calculation_comment{box-sizing:border-box;padding:10px;width:100%}#bootstrap-theme .crm-work-pattern-form-block .ui-tabs.ui-widget-content{background:none}#bootstrap-theme .work-pattern-calendar .number-of-weeks{padding:15px 0 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week{border-top:1px solid rgba(0,0,0,0.2);padding:15px 0 15px 0;margin-bottom:15px}#bootstrap-theme .work-pattern-calendar .work-pattern-week.hidden-week{display:none}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-number{float:left;font-weight:bold;padding:5px 0 15px 5px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days{table-layout:fixed}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours{float:right;padding:5px 5px 15px 0}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-hours .number-of-hours{font-weight:bold}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days td{padding:5px 10px 5px 10px}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days input{min-width:0;text-align:center}#bootstrap-theme .work-pattern-calendar .work-pattern-week .week-days select{min-width:0;width:100% !important}#bootstrap-theme .work-pattern-calendar .work-pattern-week .hours-row td{padding-top:15px;padding-bottom:15px;border-top:1px solid rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.chr_leave-calendar__day-tooltip.tooltip.in{opacity:1}.chr_leave-calendar__day-tooltip .tooltip-arrow{border-top-color:#fff !important}.chr_leave-calendar__day-tooltip .tooltip-inner{background-color:#fff;border-radius:0;box-shadow:0 3px 8px 0 rgba(49,40,40,0.25);color:#464354;padding:0}.chr_leave-calendar__day-tooltip__item{cursor:pointer;font-size:11px;min-width:154px;padding:8px}.chr_leave-calendar__day-tooltip__item:hover{background-color:#e8eef0}.chr_leave-calendar__day-tooltip__item_absence-type{font-size:13px}.chr_leave-calendar__day-tooltip__item_request-status{color:#9494a5;margin-bottom:2px}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.5384615385;color:#4d4d69;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#42425a;background-color:#f3f6f7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0071bd}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#e8eef0}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.5384615385;color:#464354;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.dropdown-header{padding:11px 20px}.dropdown-menu{-webkit-box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);box-shadow:0 3px 18px 0 rgba(48,40,40,0.25);border:0;margin:0;padding:0}.dropdown-menu>li{border:0;margin:0;padding:0}.dropdown-menu>li>a{padding:11px 20px} diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index c2d05a9af4d..d0fea5a0b76 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var n="previous"===e?"subtract":"add";$(N.selectedMonth.moment[n](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT, -G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()} -n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var n="previous"===e?"subtract":"add";$(N.selectedMonth.moment[n](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[], +G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){ +o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 71d49b9aad2..f7ce7afd716 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0, -allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date, -i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={}, -Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm", +msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){ +return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={}, +Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index b0bd0ea5444..a27bd48c288 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict" +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict" ;return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)} function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1, Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index de5e08c2486..8c28c523bd9 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===P?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=P(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function x(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=x(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=x(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),x())})}function v(e){N.injectMonth=!0,j("injected").then(function(){x(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),I(),E(),R("month")}function S(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function x(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride -}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),x("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,x("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function x(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||x("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(x("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=x,te.isLeaveType=I,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(D,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0 -})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function P(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),D({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function D(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return D(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function x(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function I(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),x(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(x)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function x(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=A,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(D)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function P(){u.isMode("view")||(C(),w(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function x(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=x,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=P();return Ee.isMode("edit")&&(e=e&&(V()||D())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function x(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function I(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:xe}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){xe=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==xe})}):f.find(xe).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(Ie)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,x(),A(),Ee.request.isValid().then(ee()&&I).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Se={},Re=[],xe="",Ie="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug, -pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[P]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function P(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=P(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride +}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0 +})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||P())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){ +return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index d2bffe1d15a..22dfb0352f8 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -37,6 +37,7 @@ define([ { label: 'AT', description: 'Accrued TOIL' } ]; + vm.checkIfAbsenceTypeIdIsDefined = checkIfAbsenceTypeIdIsDefined; vm.checkIfAbsenceTypeIsSelectedForFiltering = checkIfAbsenceTypeIsSelectedForFiltering; vm.getAbsenceTypeStyle = getAbsenceTypeStyle; vm.resetFilteringByAbsenceTypes = resetFilteringByAbsenceTypes; @@ -46,6 +47,17 @@ define([ initWatchers(); }()); + /** + * Checks if the given absence type has a defined id or not. + * Useful for filtering absence types with defined ids. + * + * @param {Object} absenceType + * @return boolean + */ + function checkIfAbsenceTypeIdIsDefined (absenceType) { + return !!absenceType.id; + } + /** * Checks if absence type is selected for filtering * @@ -80,7 +92,7 @@ define([ }, function (newValue, oldValue) { if (newValue !== oldValue) { $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', - _.compact(vm.absenceTypesToFilterBy)); + vm.absenceTypesToFilterBy); } }, true); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js index 55bef0de6df..5d3db391fda 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-legend.component.spec.js @@ -52,6 +52,22 @@ define([ expect(controller.otherBadges.length).toBe(5); }); + describe('checkIfAbsenceTypeIdIsDefined()', function () { + describe('when the absence type has an id defined', function () { + it('returns true', function () { + expect(controller.checkIfAbsenceTypeIdIsDefined({ id: _.uniqueId() })) + .toBe(true); + }); + }); + + describe('when the absence type has an empty id', function () { + it('returns false', function () { + expect(controller.checkIfAbsenceTypeIdIsDefined({ id: '' })) + .toBe(false); + }); + }); + }); + describe('getAbsenceTypeStyle()', function () { var style, absenceType; @@ -134,19 +150,6 @@ define([ }); }); }); - - describe('when an absence type with an empty id is selected', function () { - beforeEach(function () { - controller.resetFilteringByAbsenceTypes(); - controller.toggleFilteringByAbsenceType(''); - $rootScope.$digest(); - }); - - it('emits an empty array', function () { - expect($rootScope.$emit).toHaveBeenCalledWith( - 'LeaveCalendar::updateFiltersByAbsenceType', []); - }); - }); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss index 58954b5356a..712707b8b64 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/scss/components/_leave-calendar.scss @@ -1,5 +1,6 @@ $chr-leave-calendar-cell-height: 35px; $chr-leave-calendar-cell-font-size: 10px; +$chr-leave-calendar-item-generic-leave-background-color: #4d4d68; $chr-leave-calendar-item-weekend-background-color: #c7cbd0; $chr-leave-calendar-item-non-working-day-background-color: #41afcb; $chr-leave-calendar-item-public-holiday-background-color: #8ec68a; @@ -202,6 +203,10 @@ $chr-leave-calendar-legend-badge-square-hours-font-size: 6px; background-color: $chr-leave-calendar-item-public-holiday-background-color; } + &.chr_leave-calendar__legend__type-badge-generic-leave { + background-color: $chr-leave-calendar-item-generic-leave-background-color; + } + &.chr_leave-calendar__legend__type-badge-selected, &.chr_leave-calendar__legend__type-badge-clickable:hover { border: solid 1px $crm-white; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index 2c88265c7af..ef7dac384cb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -11,7 +11,7 @@

    Types
    -
    {{nonWorkingDayType.label}}
    +
    + Leave +
    Other
    From 068aafcc3bad3c0ee6a35c76bf16cf8421a561b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Thu, 31 May 2018 12:05:50 -0400 Subject: [PATCH 203/251] PCHR-3723: Filter out requests with empty absence types --- .../leave-calendar-month.component.js | 22 ++++++++- .../leave-calendar-month.component.spec.js | 46 ++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index 5343444f2dd..217175e3def 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -210,6 +210,20 @@ define([ return CRM.url('civicrm/contact/view', { cid: contactId }); } + /** + * Returns a filtered list of leave requests with defined absence types. + * This is useful to only get leave requests the contact has access to. + * + * @param {Array} leaveRequests a list of leave requests. + * @return {Array} a filtered list of leave requests. + * @TODO this check should be performed on the back-end. + */ + function getLeaveRequestsWithDefinedAbsenceTypes (leaveRequests) { + return _.filter(leaveRequests, function (leaveRequest) { + return !!leaveRequest.type_id; + }); + } + /** * Returns leave requests additional attributes for UI * @@ -435,6 +449,7 @@ define([ * @return {Promise} */ function loadMonthLeaveRequests () { + var isRequestFilteredByAbsenceType = absenceTypesToFilterBy.length > 0; var params = { from_date: { to: vm.month.days[vm.month.days.length - 1].date + ' 23:59:59' }, to_date: { from: vm.month.days[0].date + ' 00:00:00' }, @@ -442,7 +457,7 @@ define([ contact_id: { 'IN': vm.contacts.map(function (contact) { return contact.id; })}, - type_id: { 'IN': absenceTypesToFilterBy.length + type_id: { 'IN': isRequestFilteredByAbsenceType ? absenceTypesToFilterBy : _.pluck(vm.supportData.absenceTypes, 'id') } }; @@ -451,6 +466,11 @@ define([ .then(function (leaveRequestsData) { leaveRequests = {}; + if (isRequestFilteredByAbsenceType) { + leaveRequestsData.list = getLeaveRequestsWithDefinedAbsenceTypes( + leaveRequestsData.list); + } + return indexLeaveRequests(leaveRequestsData.list); }); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index 1f4ca124f45..fcb400ddf85 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -266,6 +266,42 @@ type_id: { 'IN': filterValue } }), null, null, null, false); }); + + describe('displaying only public leave requests', function () { + var privateLeaveRequests; + var contactId = _.uniqueId(); + + beforeEach(function () { + var leaveRequests = _.cloneDeep(LeaveRequestData.all().values); + + leaveRequests.slice(0, 3).forEach(function (leaveRequest) { + leaveRequest.contact_id = contactId; + leaveRequest.type_id = ''; + + return leaveRequest; + }); + + LeaveRequest.all.and.returnValue($q.resolve({ + count: leaveRequests.length, + list: leaveRequests + })); + + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', filterValue); + $rootScope.$digest(); + + // Gets private requests assigned to the contact and stored in + // the calendar month controller: + privateLeaveRequests = _.chain(controller.month.days).pluck('contactsData') + .pluck(contactId).pluck('leaveRequests').flatten() + .filter(function (leaveRequest) { + return leaveRequest.type_id === ''; + }).value(); + }); + + it('is does not store information about private requests', function () { + expect(privateLeaveRequests.length).toBe(0); + }); + }); }); }); }); @@ -954,12 +990,20 @@ * @param {Boolean} sendSignal - if to send a month signal or not */ function compileComponent (sendSignal) { + var absenceTypes = _.clone(AbsenceTypeData.all().values); + + // append generic absence type: + absenceTypes.push({ + id: '', + label: 'Leave' + }); + controller = $componentController('leaveCalendarMonth', null, { contacts: _.clone(ContactData.all.values), month: february, period: period2016, supportData: { - absenceTypes: AbsenceTypeData.all().values, + absenceTypes: absenceTypes, dayTypes: OptionGroupData.getCollection('hrleaveandabsences_leave_request_day_type'), leaveRequestStatuses: OptionGroupData.getCollection('hrleaveandabsences_leave_request_status'), publicHolidays: publicHolidays From a660dc984351e6eeab5a8a0cd31e54c471eead5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Thu, 31 May 2018 12:11:24 -0400 Subject: [PATCH 204/251] PCHR-3723: Add dist files --- .../js/angular/dist/absence-tab.min.js | 6 +++--- .../js/angular/dist/admin-dashboard.min.js | 8 ++++---- .../js/angular/dist/manager-leave.min.js | 8 ++++---- .../js/angular/dist/my-leave.min.js | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index d0fea5a0b76..8930e12ea97 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ !function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var n="previous"===e?"subtract":"add";$(N.selectedMonth.moment[n](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function N(e){h(e),-1!==w().indexOf(e.status_id)&&u(e)}function j(e){return a.all(R(e).map(function(n){return $(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var W=[],H=!1,Y=[],G={},V={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=x,z.contactsList=f,z.getContactUrl=g,function(){var e=n().month(z.month.month).year(z.month.year);y(),C(),z.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[], -G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){ -o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +function r(){u.absenceTypesToFilterBy=[]}function c(n){e.includes(u.absenceTypesToFilterBy,n)?e.remove(u.absenceTypesToFilterBy,function(e){return n===e}):u.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIdIsDefined=a,u.checkIfAbsenceTypeIsSelectedForFiltering=o,u.getAbsenceTypeStyle=s,u.resetFilteringByAbsenceTypes=r,u.toggleFilteringByAbsenceType=c,function(){i()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){C([e]),W(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(X.period.start_date)&&o.isSameOrBefore(X.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return V[e]}function f(){return X.showOnlyWithLeaveRequests?X.contacts.filter(function(n){var t=Object.keys(z[n.id]||{}).length,a=e.includes(X.showTheseContacts,n.id);return t||a}):X.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&(x(n),W(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(z[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(e){return CRM.url("civicrm/contact/view",{cid:e})}function _(n){return e.filter(n,function(e){return!!e.type_id})}function y(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:N(t),isAccruedTOIL:D(t,"toil"),isRequested:R(t),isAM:A("half_day_am",t,e.date),isPM:A("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function q(){X.supportData.dayTypes=e.indexBy(X.supportData.dayTypes,"name"),X.supportData.leaveRequestStatuses=e.indexBy(X.supportData.leaveRequestStatuses,"value"),X.supportData.publicHolidays=e.transform(X.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function C(e){return e.forEach(function(e){var n=I(e);z[e.contact_id]=z[e.contact_id]||{},n.forEach(function(n){z[e.contact_id][n.date]||(z[e.contact_id][n.date]=[]),z[e.contact_id][n.date].push(e)})}),a.resolve()}function T(){G.push(o.$on("LeaveCalendar::showMonth",F)),G.push(r.subscribe("LeaveRequest::new",u)),G.push(r.subscribe("LeaveRequest::edit",j)),G.push(r.subscribe("LeaveRequest::updatedByManager",j)),G.push(r.subscribe("LeaveRequest::delete",h)),G.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):j(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){H=n,F(e,!0)})}function A(e,t,a){var o=X.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function D(e,n){return e.request_type===n}function P(e){return!!X.supportData.publicHolidays[p(e).valueOf()]}function R(n){var t=X.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function I(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===X.month.month&&o.year()===X.month.year&&a.push(e.find(X.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function w(n){var t=e.find(X.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function k(){return[w(c.statusNames.approved),w(c.statusNames.adminApproved),w(c.statusNames.awaitingApproval),w(c.statusNames.moreInformationRequired)]}function O(){return X.month.loading=!0,a.all([S(),L()]).then(M).then(B).then(function(){Y=!0,X.month.loading=!1})}function L(){var n=H.length>0,t={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:k()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:n?H:e.pluck(X.supportData.absenceTypes,"id")}};return i.all(t,null,null,null,!1).then(function(e){return z={},n&&(e.list=_(e.list)),C(e.list)})}function S(){var n=X.month.days[0].date,t=X.month.days[X.month.days.length-1].date;return s.get(X.contacts.map(function(e){return e.id}),n,t).then(function(n){V=e.indexBy(n,"contact_id")})}function M(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(n){return e.includes(X.contactIdsToReduceTo,n.contact_id)||e.find(z,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function x(n){var t=I(n);z[n.contact_id]=z[n.contact_id]||{},t.forEach(function(t){e.remove(z[n.contact_id][t.date],function(e){return e.id===n.id})})}function $(){o.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function E(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return z[t]&&z[t][n.date]?z[t][n.date]:[]}).then(function(a){a=U(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(n,a)})})}function B(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(n){return E(e,n.id)}))}))}function F(e,n){X.currentPage=0,X.visible=!0,(n||!Y)&&O()}function U(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(n){var t=e.find(X.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function j(e){h(e),-1!==k().indexOf(e.status_id)&&u(e)}function W(e){return a.all(I(e).map(function(n){return E(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var H=[],Y=!1,G=[],V={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=$,X.contactsList=f,X.getContactUrl=g,function(){var e=n().month(X.month.month).year(X.month.year);q(),T(),X.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={ +delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements") +;var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index f7ce7afd716..a4a8881ab32 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return L(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm", -msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){ -return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={}, -Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function E(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=L,X.contactsList=m,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired], +dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ +u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0}, +Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index a27bd48c288..9f601b6b8da 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function U(e){return a.all(P(e).map(function(t){return E(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=M,z.contactsList=m,z.getContactUrl=b,function(){var e=t().month(z.month.month).year(z.month.year);_(),$(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict" -;return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)} -function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1, -Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=E,X.contactsList=m,X.getContactUrl=b,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), +define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ +var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl") +;var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 8c28c523bd9..f0eee90a7fb 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -8,7 +8,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[P]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function P(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=P(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride -}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function N(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function U(e){return a.all(D(e).map(function(t){return M(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var H=[],W=!1,V=[],Y={},G={},z=this;z.currentPage=0,z.pageSize=20,z.visible=!1,z.showContactName=!!z.showContactName,z.showOnlyWithLeaveRequests=!!z.showOnlyWithLeaveRequests,z.$onDestroy=E,z.contactsList=f,z.getContactUrl=g,function(){var e=t().month(z.month.month).year(z.month.year);_(),q(),z.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0 -})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||P())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){ -return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),q(e.list)})}function O(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&I()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function H(e){return a.all(P(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=M,X.contactsList=f,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);$(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id} +;return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||P())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){ +define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file From 6b0c5a771e5db86635a7dbf8b7b9276385a8c282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Thu, 31 May 2018 12:41:26 -0400 Subject: [PATCH 205/251] PCHR-3723: Rename "Display All" absence type filter reset button --- .../views/shared/components/leave-calendar-legend.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html index ef7dac384cb..0556459c659 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar-legend.html @@ -28,7 +28,7 @@

    - Reset filters + Display All

    From e3b543779f8c0965e2f3f27a6a75ca9370e79eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Thu, 31 May 2018 12:53:08 -0400 Subject: [PATCH 206/251] PCHR-3723: PR Feedback --- .../shared/components/leave-calendar-legend.component.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js index 22dfb0352f8..98285e7e5ad 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-legend.component.js @@ -49,10 +49,9 @@ define([ /** * Checks if the given absence type has a defined id or not. - * Useful for filtering absence types with defined ids. * - * @param {Object} absenceType - * @return boolean + * @param {Object} absenceType + * @return {Boolean} */ function checkIfAbsenceTypeIdIsDefined (absenceType) { return !!absenceType.id; From 1f7762705741a6757a2f38cdec872fcb42643de5 Mon Sep 17 00:00:00 2001 From: Samson Alajede Date: Fri, 1 Jun 2018 14:26:49 +0100 Subject: [PATCH 207/251] PCHR-3742: Disabling or deleting options breaks job roles tab --- com.civicrm.hrjobroles/js/dist/job-roles.min.js | 4 ++-- .../controllers/job-roles.controller.js | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/com.civicrm.hrjobroles/js/dist/job-roles.min.js b/com.civicrm.hrjobroles/js/dist/job-roles.min.js index 6f010dec8c6..08f7837b17c 100644 --- a/com.civicrm.hrjobroles/js/dist/job-roles.min.js +++ b/com.civicrm.hrjobroles/js/dist/job-roles.min.js @@ -12,6 +12,6 @@ Build date: 2014-01-10 */ -define("job-roles/modules/job-roles.config",["common/angular"],function(e){"use strict";function t(e,t,n,r,a){t.debugEnabled(a.debug),r.resolveForAll({format:["DateFormat",function(e){return e.getDateFormat()}]}).when("/",{templateUrl:a.pathBaseUrl+a.pathTpl+"mainTemplate.html?v=1",resolve:{},controller:"JobRolesController",controllerAs:"jobroles"}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,e.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("hrjobroles.config",["hrjobroles.constants"]).config(t),t.$inject=["$httpProvider","$logProvider","$resourceProvider","$routeProvider","settings"]}),define("job-roles/modules/job-roles.constants",["common/angular"],function(e){"use strict";e.module("hrjobroles.constants",[]).constant("settings",{classNamePrefix:"hrjobroles-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:CRM.vars.hrjobroles.path,pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.hrjobroles.baseURL+"/",pathTpl:"views/",pathIncludeTpl:"views/include/"})}),define("job-roles/controllers/job-roles.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function r(r,a,o,i,s,l,u,c,d,f,m,p,b,h,v,g,_){function $(e,t){void 0===Ce.editData[e]&&(Ce.editData[e]={}),"cost_centre"===t?(void 0!==Ce.editData[e].cost_centers&&Ce.editData[e].cost_centers instanceof Array||(Ce.editData[e].cost_centers=[]),Ce.editData[e].cost_centers.push({id:Ce.editData[e].cost_centers.length+1,cost_centre_id:"",type:"1",percentage:"0",amount:"0"})):(void 0!==Ce.editData[e].funders&&Ce.editData[e].funders instanceof Array||(Ce.editData[e].funders=[]),Ce.editData[e].funders.push({id:Ce.editData[e].funders.length+1,funder_id:"",type:"1",percentage:"0",amount:"0"}))}function w(){Ce.add_new=!0}function y(){Ce.add_new=!1,delete Ce.editData.new_role_id}function D(e,t){Ce.viewTab[e]=t}function E(t,n){K(t)&&(t=null),K(n)&&(n=null);var r=!0;return!!t&&(e.forEach(Ce.contractsData,function(e){ye(t)===ye(e.start_date)&&ye(n)===ye(e.end_date)&&(r=!1)}),r)}function j(){return void 0===Ce.editData.new_role_id||void 0===Ce.editData.new_role_id.title||""===Ce.editData.new_role_id.title||void 0===Ce.editData.new_role_id.job_contract_id||""===Ce.editData.new_role_id.job_contract_id}function C(e){Ce.collapsedRows[e]=!Ce.collapsedRows[e]}function R(e){return g.getContracts(e).then(function(e){for(var t=[],n={},r=0;r-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function $e(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!_e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function we(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var ye=r("formatDate"),De={},Ee=r("getActiveValues"),je=["funders","cost_centers"],Ce=this;Ce.contactId=m.contactId,Ce.format=p.DATE_FORMAT,Ce.loading=!0,Ce.pastJobRoles=[],Ce.presentJobRoles=[],Ce.collapsedRows=[],Ce.contactList=[],Ce.editData={},Ce.viewTab=[],Ce.CalendarShow=[],Ce.contractsData=[],Ce.DepartmentsData={},Ce.LevelsData={},Ce.LocationsData={},Ce.RegionsData={},Ce.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Ce.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Ce.rowTypes={},Ce.rowTypes[0]={id:0,name:"Fixed"},Ce.rowTypes[1]={id:1,name:"%"},Ce.addAdditionalRow=$,Ce.addNewRole=w,Ce.cancelNewRole=y,Ce.changeTab=D,Ce.checkIfDatesAreCustom=E,Ce.checkNewRole=j,Ce.collapseRow=C,Ce.deleteAdditionalRow=x,Ce.dpOpen=S,Ce.getContactList=J,Ce.getCostLabel=U,Ce.initData=P,Ce.isChanged=G,Ce.isOpen=Z,Ce.isRowCollapsed=X,Ce.isTab=Q,Ce.onAfterSave=ee,Ce.onCancel=te,Ce.onContractEdited=ne,Ce.onContractSelected=re,Ce.open=ae,Ce.removeRole=ie,Ce.saveNewRole=se,Ce.select=le,Ce.showRowType=ue,Ce.showSave=ce,Ce.status="",Ce.today=fe,Ce.updateAdditionalRowType=me,Ce.updateRole=ve,Ce.validateRole=$e,Ce.validateTitle=we,Ce.openOptionsEditor=q,function(){de(),Ce.today(),o.all([W(),I(Ce.contactId),Ce.getContactList()]).then(function(){Ce.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ', -buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function $e(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!_e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function we(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var ye=r("formatDate"),De={},Ee=r("getActiveValues"),je=["funders","cost_centers"],Ce=this;Ce.contactId=m.contactId,Ce.format=p.DATE_FORMAT,Ce.loading=!0,Ce.pastJobRoles=[],Ce.presentJobRoles=[],Ce.collapsedRows=[],Ce.contactList=[],Ce.editData={},Ce.viewTab=[],Ce.CalendarShow=[],Ce.contractsData=[],Ce.DepartmentsData={},Ce.LevelsData={},Ce.LocationsData={},Ce.RegionsData={},Ce.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Ce.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Ce.rowTypes={},Ce.rowTypes[0]={id:0,name:"Fixed"},Ce.rowTypes[1]={id:1,name:"%"},Ce.addAdditionalRow=$,Ce.addNewRole=w,Ce.cancelNewRole=y,Ce.changeTab=D,Ce.checkIfDatesAreCustom=E,Ce.checkNewRole=j,Ce.collapseRow=C,Ce.deleteAdditionalRow=x,Ce.dpOpen=S,Ce.getContactList=J,Ce.getCostLabel=U,Ce.initData=P,Ce.isChanged=G,Ce.isOpen=Z,Ce.isRowCollapsed=X,Ce.isTab=Q,Ce.onAfterSave=ee,Ce.onCancel=te,Ce.onContractEdited=ne,Ce.onContractSelected=re,Ce.open=ae,Ce.removeRole=ie,Ce.saveNewRole=se,Ce.select=le,Ce.showRowType=ue,Ce.showSave=ce,Ce.status="",Ce.today=fe,Ce.updateAdditionalRowType=me,Ce.updateRole=ve,Ce.validateRole=$e,Ce.validateTitle=we,Ce.openOptionsEditor=q,function(){de(),Ce.today(),o.all([W(),I(Ce.contactId),Ce.getContactList()]).then(function(){Ce.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'', +controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c Date: Fri, 1 Jun 2018 14:40:52 +0100 Subject: [PATCH 208/251] PCHR-3724: Sync styles with Shoreditch --- hrjobcontract/config.rb | 2 +- hrjobcontract/css/hrjc.css | 2278 +---------------- .../civihr/partials/_shoreditch-imports.scss | 8 + hrjobcontract/scss/hrjc.scss | 15 +- 4 files changed, 21 insertions(+), 2282 deletions(-) create mode 100644 hrjobcontract/scss/civihr/partials/_shoreditch-imports.scss diff --git a/hrjobcontract/config.rb b/hrjobcontract/config.rb index 8d2a21fb10a..5eadc0a78d0 100644 --- a/hrjobcontract/config.rb +++ b/hrjobcontract/config.rb @@ -17,7 +17,7 @@ # relative_assets = true # To disable debugging comments that display the original location of your selectors. Uncomment: -# line_comments = false +line_comments = false # If you prefer the indented syntax, you might want to regenerate this diff --git a/hrjobcontract/css/hrjc.css b/hrjobcontract/css/hrjc.css index 39aeb8f45bf..455e9c8890d 100644 --- a/hrjobcontract/css/hrjc.css +++ b/hrjobcontract/css/hrjc.css @@ -1,5 +1,4 @@ @charset "UTF-8"; -/* line 8, ../scss/hrjc.scss */ #hrjob-contract { /** * Unset Eric Meyer's Reset CSS styles. @@ -72,7 +71,6 @@ * Ad-hoc customizations */ } -/* line 7, ../scss/civihr/modules/_unset.scss */ #hrjob-contract html, #hrjob-contract body, #hrjob-contract div, @@ -146,7 +144,6 @@ border: initial; vertical-align: initial; } -/* line 79, ../scss/civihr/modules/_unset.scss */ #hrjob-contract ol, #hrjob-contract ul { padding-start: 40px; @@ -154,48 +151,39 @@ -webkit-padding-start: 40px; list-style: initial; } -/* line 86, ../scss/civihr/modules/_unset.scss */ #hrjob-contract blockquote, #hrjob-contract q { quotes: initial; } -/* line 90, ../scss/civihr/modules/_unset.scss */ #hrjob-contract blockquote:before, #hrjob-contract blockquote:after, #hrjob-contract q:before, #hrjob-contract q:after { content: initial; } -/* line 98, ../scss/civihr/modules/_unset.scss */ #hrjob-contract ins { text-decoration: initial; } -/* line 101, ../scss/civihr/modules/_unset.scss */ #hrjob-contract del { text-decoration: initial; } -/* line 106, ../scss/civihr/modules/_unset.scss */ #hrjob-contract table { border-collapse: initial; border-spacing: initial; } -/* line 110, ../scss/civihr/modules/_unset.scss */ #hrjob-contract table td, #hrjob-contract table th { color: inherit; font-size: inherit; } -/* line 123, ../scss/civihr/modules/_unset.scss */ #hrjob-contract input, #hrjob-contract select, #hrjob-contract textarea { font-family: initial; } -/* line 128, ../scss/civihr/modules/_unset.scss */ #hrjob-contract textarea { font-size: initial; line-height: initial; } -/* line 32, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract article, #hrjob-contract aside, #hrjob-contract details, @@ -211,7 +199,6 @@ #hrjob-contract summary { display: block; } -/* line 53, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract audio, #hrjob-contract canvas, #hrjob-contract progress, @@ -219,53 +206,42 @@ display: inline-block; vertical-align: baseline; } -/* line 66, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract audio:not([controls]) { display: none; height: 0; } -/* line 76, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract [hidden], #hrjob-contract template { display: none; } -/* line 88, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract a { background-color: transparent; } -/* line 96, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract a:active, #hrjob-contract a:hover { outline: 0; } -/* line 108, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract abbr[title] { border-bottom: 1px dotted; } -/* line 116, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract b, #hrjob-contract strong { font-weight: bold; } -/* line 125, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract dfn { font-style: italic; } -/* line 134, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract h1 { font-size: 2em; margin: 0.67em 0; } -/* line 143, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract mark { background: #ff0; color: #000; } -/* line 152, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract small { font-size: 80%; } -/* line 160, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract sub, #hrjob-contract sup { font-size: 75%; @@ -273,37 +249,29 @@ position: relative; vertical-align: baseline; } -/* line 168, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract sup { top: -0.5em; } -/* line 172, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract sub { bottom: -0.25em; } -/* line 183, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract img { border: 0; } -/* line 191, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract svg:not(:root) { overflow: hidden; } -/* line 202, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract figure { margin: 1em 40px; } -/* line 210, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } -/* line 220, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract pre { overflow: auto; } -/* line 228, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract code, #hrjob-contract kbd, #hrjob-contract pre, @@ -311,7 +279,6 @@ font-family: monospace, monospace; font-size: 1em; } -/* line 251, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button, #hrjob-contract input, #hrjob-contract optgroup, @@ -321,16 +288,13 @@ font: inherit; margin: 0; } -/* line 265, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button { overflow: visible; } -/* line 276, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button, #hrjob-contract select { text-transform: none; } -/* line 289, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button, #hrjob-contract input[type="button"], #hrjob-contract input[type="reset"], @@ -338,75 +302,61 @@ -webkit-appearance: button; cursor: pointer; } -/* line 301, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button[disabled], #hrjob-contract input[disabled] { cursor: default; } -/* line 310, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract button::-moz-focus-inner, #hrjob-contract input::-moz-focus-inner { border: 0; padding: 0; } -/* line 321, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input { line-height: normal; } -/* line 333, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="checkbox"], #hrjob-contract input[type="radio"] { box-sizing: border-box; padding: 0; } -/* line 345, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="number"]::-webkit-inner-spin-button, #hrjob-contract input[type="number"]::-webkit-outer-spin-button { height: auto; } -/* line 356, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; } -/* line 369, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract input[type="search"]::-webkit-search-cancel-button, #hrjob-contract input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } -/* line 378, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } -/* line 389, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract legend { border: 0; padding: 0; } -/* line 398, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract textarea { overflow: auto; } -/* line 407, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract optgroup { font-weight: bold; } -/* line 418, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract table { border-collapse: collapse; border-spacing: 0; } -/* line 423, ../scss/civihr/bootstrap/_normalize-custom.scss */ #hrjob-contract td, #hrjob-contract th { padding: 0; } @media print { - /* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract *, #hrjob-contract *:before, #hrjob-contract *:after { @@ -415,78 +365,62 @@ box-shadow: none !important; text-shadow: none !important; } - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract a, #hrjob-contract a:visited { text-decoration: underline; } - /* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract a[href]:after { content: " (" attr(href) ")"; } - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract abbr[title]:after { content: " (" attr(title) ")"; } - /* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract a[href^="#"]:after, #hrjob-contract a[href^="javascript:"]:after { content: ""; } - /* line 38, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract pre, #hrjob-contract blockquote { border: 1px solid #999; page-break-inside: avoid; } - /* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract thead { display: table-header-group; } - /* line 48, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract tr, #hrjob-contract img { page-break-inside: avoid; } - /* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract img { max-width: 100% !important; } - /* line 57, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract p, #hrjob-contract h2, #hrjob-contract h3 { orphans: 3; widows: 3; } - /* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract h2, #hrjob-contract h3 { page-break-after: avoid; } - /* line 72, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .navbar { display: none; } - /* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .btn > .caret, #hrjob-contract .dropup > .btn > .caret { border-top-color: #000 !important; } - /* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .label { border: 1px solid #000; } - /* line 85, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .table { border-collapse: collapse !important; } - /* line 88, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .table td, #hrjob-contract .table th { background-color: #fff !important; } - /* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_print.scss */ #hrjob-contract .table-bordered th, #hrjob-contract .table-bordered td { border: 1px solid #ddd !important; @@ -494,10 +428,9 @@ } @font-face { font-family: 'Glyphicons Halflings'; - src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot"); - src: url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); + src: url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.eot")); + src: url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix")) format("embedded-opentype"), url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.woff")) format("woff"), url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.ttf")) format("truetype"), url(font-path("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular")) format("svg"); } -/* line 26, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon { position: relative; top: 1px; @@ -509,804 +442,604 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -/* line 39, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-asterisk:before { content: "\2a"; } -/* line 40, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-plus:before { content: "\2b"; } -/* line 42, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-euro:before, #hrjob-contract .glyphicon-eur:before { content: "\20ac"; } -/* line 43, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-minus:before { content: "\2212"; } -/* line 44, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cloud:before { content: "\2601"; } -/* line 45, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-envelope:before { content: "\2709"; } -/* line 46, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-pencil:before { content: "\270f"; } -/* line 47, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-glass:before { content: "\e001"; } -/* line 48, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-music:before { content: "\e002"; } -/* line 49, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-search:before { content: "\e003"; } -/* line 50, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-heart:before { content: "\e005"; } -/* line 51, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-star:before { content: "\e006"; } -/* line 52, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-star-empty:before { content: "\e007"; } -/* line 53, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-user:before { content: "\e008"; } -/* line 54, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-film:before { content: "\e009"; } -/* line 55, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-th-large:before { content: "\e010"; } -/* line 56, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-th:before { content: "\e011"; } -/* line 57, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-th-list:before { content: "\e012"; } -/* line 58, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ok:before { content: "\e013"; } -/* line 59, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-remove:before { content: "\e014"; } -/* line 60, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-zoom-in:before { content: "\e015"; } -/* line 61, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-zoom-out:before { content: "\e016"; } -/* line 62, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-off:before { content: "\e017"; } -/* line 63, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-signal:before { content: "\e018"; } -/* line 64, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cog:before { content: "\e019"; } -/* line 65, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-trash:before { content: "\e020"; } -/* line 66, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-home:before { content: "\e021"; } -/* line 67, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-file:before { content: "\e022"; } -/* line 68, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-time:before { content: "\e023"; } -/* line 69, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-road:before { content: "\e024"; } -/* line 70, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-download-alt:before { content: "\e025"; } -/* line 71, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-download:before { content: "\e026"; } -/* line 72, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-upload:before { content: "\e027"; } -/* line 73, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-inbox:before { content: "\e028"; } -/* line 74, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-play-circle:before { content: "\e029"; } -/* line 75, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-repeat:before { content: "\e030"; } -/* line 76, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-refresh:before { content: "\e031"; } -/* line 77, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-list-alt:before { content: "\e032"; } -/* line 78, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-lock:before { content: "\e033"; } -/* line 79, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-flag:before { content: "\e034"; } -/* line 80, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-headphones:before { content: "\e035"; } -/* line 81, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-volume-off:before { content: "\e036"; } -/* line 82, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-volume-down:before { content: "\e037"; } -/* line 83, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-volume-up:before { content: "\e038"; } -/* line 84, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-qrcode:before { content: "\e039"; } -/* line 85, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-barcode:before { content: "\e040"; } -/* line 86, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tag:before { content: "\e041"; } -/* line 87, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tags:before { content: "\e042"; } -/* line 88, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-book:before { content: "\e043"; } -/* line 89, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bookmark:before { content: "\e044"; } -/* line 90, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-print:before { content: "\e045"; } -/* line 91, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-camera:before { content: "\e046"; } -/* line 92, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-font:before { content: "\e047"; } -/* line 93, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bold:before { content: "\e048"; } -/* line 94, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-italic:before { content: "\e049"; } -/* line 95, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-text-height:before { content: "\e050"; } -/* line 96, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-text-width:before { content: "\e051"; } -/* line 97, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-left:before { content: "\e052"; } -/* line 98, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-center:before { content: "\e053"; } -/* line 99, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-right:before { content: "\e054"; } -/* line 100, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-align-justify:before { content: "\e055"; } -/* line 101, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-list:before { content: "\e056"; } -/* line 102, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-indent-left:before { content: "\e057"; } -/* line 103, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-indent-right:before { content: "\e058"; } -/* line 104, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-facetime-video:before { content: "\e059"; } -/* line 105, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-picture:before { content: "\e060"; } -/* line 106, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-map-marker:before { content: "\e062"; } -/* line 107, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-adjust:before { content: "\e063"; } -/* line 108, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tint:before { content: "\e064"; } -/* line 109, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-edit:before { content: "\e065"; } -/* line 110, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-share:before { content: "\e066"; } -/* line 111, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-check:before { content: "\e067"; } -/* line 112, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-move:before { content: "\e068"; } -/* line 113, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-step-backward:before { content: "\e069"; } -/* line 114, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fast-backward:before { content: "\e070"; } -/* line 115, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-backward:before { content: "\e071"; } -/* line 116, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-play:before { content: "\e072"; } -/* line 117, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-pause:before { content: "\e073"; } -/* line 118, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-stop:before { content: "\e074"; } -/* line 119, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-forward:before { content: "\e075"; } -/* line 120, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fast-forward:before { content: "\e076"; } -/* line 121, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-step-forward:before { content: "\e077"; } -/* line 122, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-eject:before { content: "\e078"; } -/* line 123, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-left:before { content: "\e079"; } -/* line 124, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-right:before { content: "\e080"; } -/* line 125, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-plus-sign:before { content: "\e081"; } -/* line 126, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-minus-sign:before { content: "\e082"; } -/* line 127, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-remove-sign:before { content: "\e083"; } -/* line 128, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ok-sign:before { content: "\e084"; } -/* line 129, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-question-sign:before { content: "\e085"; } -/* line 130, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-info-sign:before { content: "\e086"; } -/* line 131, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-screenshot:before { content: "\e087"; } -/* line 132, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-remove-circle:before { content: "\e088"; } -/* line 133, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ok-circle:before { content: "\e089"; } -/* line 134, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-ban-circle:before { content: "\e090"; } -/* line 135, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-left:before { content: "\e091"; } -/* line 136, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-right:before { content: "\e092"; } -/* line 137, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-up:before { content: "\e093"; } -/* line 138, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-arrow-down:before { content: "\e094"; } -/* line 139, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-share-alt:before { content: "\e095"; } -/* line 140, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-full:before { content: "\e096"; } -/* line 141, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-small:before { content: "\e097"; } -/* line 142, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-exclamation-sign:before { content: "\e101"; } -/* line 143, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-gift:before { content: "\e102"; } -/* line 144, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-leaf:before { content: "\e103"; } -/* line 145, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fire:before { content: "\e104"; } -/* line 146, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-eye-open:before { content: "\e105"; } -/* line 147, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-eye-close:before { content: "\e106"; } -/* line 148, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-warning-sign:before { content: "\e107"; } -/* line 149, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-plane:before { content: "\e108"; } -/* line 150, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-calendar:before { content: "\e109"; } -/* line 151, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-random:before { content: "\e110"; } -/* line 152, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-comment:before { content: "\e111"; } -/* line 153, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-magnet:before { content: "\e112"; } -/* line 154, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-up:before { content: "\e113"; } -/* line 155, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-chevron-down:before { content: "\e114"; } -/* line 156, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-retweet:before { content: "\e115"; } -/* line 157, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-shopping-cart:before { content: "\e116"; } -/* line 158, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-folder-close:before { content: "\e117"; } -/* line 159, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-folder-open:before { content: "\e118"; } -/* line 160, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-vertical:before { content: "\e119"; } -/* line 161, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-resize-horizontal:before { content: "\e120"; } -/* line 162, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hdd:before { content: "\e121"; } -/* line 163, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bullhorn:before { content: "\e122"; } -/* line 164, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-bell:before { content: "\e123"; } -/* line 165, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-certificate:before { content: "\e124"; } -/* line 166, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-thumbs-up:before { content: "\e125"; } -/* line 167, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-thumbs-down:before { content: "\e126"; } -/* line 168, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-right:before { content: "\e127"; } -/* line 169, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-left:before { content: "\e128"; } -/* line 170, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-up:before { content: "\e129"; } -/* line 171, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hand-down:before { content: "\e130"; } -/* line 172, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-right:before { content: "\e131"; } -/* line 173, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-left:before { content: "\e132"; } -/* line 174, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-up:before { content: "\e133"; } -/* line 175, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-circle-arrow-down:before { content: "\e134"; } -/* line 176, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-globe:before { content: "\e135"; } -/* line 177, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-wrench:before { content: "\e136"; } -/* line 178, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tasks:before { content: "\e137"; } -/* line 179, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-filter:before { content: "\e138"; } -/* line 180, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-briefcase:before { content: "\e139"; } -/* line 181, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-fullscreen:before { content: "\e140"; } -/* line 182, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-dashboard:before { content: "\e141"; } -/* line 183, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-paperclip:before { content: "\e142"; } -/* line 184, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-heart-empty:before { content: "\e143"; } -/* line 185, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-link:before { content: "\e144"; } -/* line 186, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-phone:before { content: "\e145"; } -/* line 187, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-pushpin:before { content: "\e146"; } -/* line 188, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-usd:before { content: "\e148"; } -/* line 189, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-gbp:before { content: "\e149"; } -/* line 190, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort:before { content: "\e150"; } -/* line 191, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-alphabet:before { content: "\e151"; } -/* line 192, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-alphabet-alt:before { content: "\e152"; } -/* line 193, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-order:before { content: "\e153"; } -/* line 194, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-order-alt:before { content: "\e154"; } -/* line 195, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-attributes:before { content: "\e155"; } -/* line 196, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sort-by-attributes-alt:before { content: "\e156"; } -/* line 197, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-unchecked:before { content: "\e157"; } -/* line 198, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-expand:before { content: "\e158"; } -/* line 199, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-collapse-down:before { content: "\e159"; } -/* line 200, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-collapse-up:before { content: "\e160"; } -/* line 201, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-log-in:before { content: "\e161"; } -/* line 202, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-flash:before { content: "\e162"; } -/* line 203, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-log-out:before { content: "\e163"; } -/* line 204, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-new-window:before { content: "\e164"; } -/* line 205, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-record:before { content: "\e165"; } -/* line 206, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-save:before { content: "\e166"; } -/* line 207, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-open:before { content: "\e167"; } -/* line 208, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-saved:before { content: "\e168"; } -/* line 209, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-import:before { content: "\e169"; } -/* line 210, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-export:before { content: "\e170"; } -/* line 211, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-send:before { content: "\e171"; } -/* line 212, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-disk:before { content: "\e172"; } -/* line 213, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-saved:before { content: "\e173"; } -/* line 214, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-remove:before { content: "\e174"; } -/* line 215, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-save:before { content: "\e175"; } -/* line 216, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-floppy-open:before { content: "\e176"; } -/* line 217, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-credit-card:before { content: "\e177"; } -/* line 218, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-transfer:before { content: "\e178"; } -/* line 219, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cutlery:before { content: "\e179"; } -/* line 220, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-header:before { content: "\e180"; } -/* line 221, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-compressed:before { content: "\e181"; } -/* line 222, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-earphone:before { content: "\e182"; } -/* line 223, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-phone-alt:before { content: "\e183"; } -/* line 224, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tower:before { content: "\e184"; } -/* line 225, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-stats:before { content: "\e185"; } -/* line 226, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sd-video:before { content: "\e186"; } -/* line 227, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-hd-video:before { content: "\e187"; } -/* line 228, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-subtitles:before { content: "\e188"; } -/* line 229, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-stereo:before { content: "\e189"; } -/* line 230, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-dolby:before { content: "\e190"; } -/* line 231, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-5-1:before { content: "\e191"; } -/* line 232, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-6-1:before { content: "\e192"; } -/* line 233, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-sound-7-1:before { content: "\e193"; } -/* line 234, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-copyright-mark:before { content: "\e194"; } -/* line 235, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-registration-mark:before { content: "\e195"; } -/* line 236, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cloud-download:before { content: "\e197"; } -/* line 237, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-cloud-upload:before { content: "\e198"; } -/* line 238, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tree-conifer:before { content: "\e199"; } -/* line 239, ../scss/civihr/bootstrap/_glyphicons-custom.scss */ #hrjob-contract .glyphicon-tree-deciduous:before { content: "\e200"; } @@ -1317,7 +1050,6 @@ font-weight: normal; font-style: normal; } -/* line 16, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa { display: inline-block; font: normal normal normal 14px/1 FontAwesome; @@ -1326,44 +1058,35 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -/* line 25, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } -/* line 30, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-2x { font-size: 2em; } -/* line 33, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-3x { font-size: 3em; } -/* line 36, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-4x { font-size: 4em; } -/* line 39, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-5x { font-size: 5em; } -/* line 42, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fw { width: 1.28571429em; text-align: center; } -/* line 46, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ul { padding-left: 0; margin-left: 2.14285714em; list-style-type: none; } -/* line 51, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ul > li { position: relative; } -/* line 54, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-li { position: absolute; left: -2.14285714em; @@ -1371,33 +1094,26 @@ top: 0.14285714em; text-align: center; } -/* line 61, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-li.fa-lg { left: -1.85714286em; } -/* line 64, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; border-radius: .1em; } -/* line 69, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .pull-right { float: right; } -/* line 72, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .pull-left { float: left; } -/* line 75, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa.pull-left { margin-right: .3em; } -/* line 78, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa.pull-right { margin-left: .3em; } -/* line 81, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; @@ -1422,42 +1138,36 @@ transform: rotate(359deg); } } -/* line 105, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } -/* line 111, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } -/* line 117, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } -/* line 123, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } -/* line 129, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } -/* line 135, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract :root .fa-rotate-90, #hrjob-contract :root .fa-rotate-180, #hrjob-contract :root .fa-rotate-270, @@ -1465,7 +1175,6 @@ #hrjob-contract :root .fa-flip-vertical { filter: none; } -/* line 142, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack { position: relative; display: inline-block; @@ -1474,7 +1183,6 @@ line-height: 2em; vertical-align: middle; } -/* line 150, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-1x, #hrjob-contract .fa-stack-2x { position: absolute; @@ -1482,1753 +1190,1330 @@ width: 100%; text-align: center; } -/* line 157, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-1x { line-height: inherit; } -/* line 160, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-2x { font-size: 2em; } -/* line 163, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-inverse { color: #ffffff; } -/* line 168, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-glass:before { content: "\f000"; } -/* line 171, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-music:before { content: "\f001"; } -/* line 174, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-search:before { content: "\f002"; } -/* line 177, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-envelope-o:before { content: "\f003"; } -/* line 180, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-heart:before { content: "\f004"; } -/* line 183, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star:before { content: "\f005"; } -/* line 186, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star-o:before { content: "\f006"; } -/* line 189, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-user:before { content: "\f007"; } -/* line 192, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-film:before { content: "\f008"; } -/* line 195, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-th-large:before { content: "\f009"; } -/* line 198, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-th:before { content: "\f00a"; } -/* line 201, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-th-list:before { content: "\f00b"; } -/* line 204, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check:before { content: "\f00c"; } -/* line 207, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-remove:before, #hrjob-contract .fa-close:before, #hrjob-contract .fa-times:before { content: "\f00d"; } -/* line 212, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-search-plus:before { content: "\f00e"; } -/* line 215, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-search-minus:before { content: "\f010"; } -/* line 218, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-power-off:before { content: "\f011"; } -/* line 221, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-signal:before { content: "\f012"; } -/* line 224, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gear:before, #hrjob-contract .fa-cog:before { content: "\f013"; } -/* line 228, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trash-o:before { content: "\f014"; } -/* line 231, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-home:before { content: "\f015"; } -/* line 234, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-o:before { content: "\f016"; } -/* line 237, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-clock-o:before { content: "\f017"; } -/* line 240, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-road:before { content: "\f018"; } -/* line 243, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-download:before { content: "\f019"; } -/* line 246, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-down:before { content: "\f01a"; } -/* line 249, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-up:before { content: "\f01b"; } -/* line 252, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-inbox:before { content: "\f01c"; } -/* line 255, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-play-circle-o:before { content: "\f01d"; } -/* line 258, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-right:before, #hrjob-contract .fa-repeat:before { content: "\f01e"; } -/* line 262, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-refresh:before { content: "\f021"; } -/* line 265, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list-alt:before { content: "\f022"; } -/* line 268, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lock:before { content: "\f023"; } -/* line 271, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flag:before { content: "\f024"; } -/* line 274, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-headphones:before { content: "\f025"; } -/* line 277, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-volume-off:before { content: "\f026"; } -/* line 280, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-volume-down:before { content: "\f027"; } -/* line 283, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-volume-up:before { content: "\f028"; } -/* line 286, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-qrcode:before { content: "\f029"; } -/* line 289, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-barcode:before { content: "\f02a"; } -/* line 292, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tag:before { content: "\f02b"; } -/* line 295, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tags:before { content: "\f02c"; } -/* line 298, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-book:before { content: "\f02d"; } -/* line 301, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bookmark:before { content: "\f02e"; } -/* line 304, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-print:before { content: "\f02f"; } -/* line 307, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-camera:before { content: "\f030"; } -/* line 310, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-font:before { content: "\f031"; } -/* line 313, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bold:before { content: "\f032"; } -/* line 316, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-italic:before { content: "\f033"; } -/* line 319, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-text-height:before { content: "\f034"; } -/* line 322, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-text-width:before { content: "\f035"; } -/* line 325, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-left:before { content: "\f036"; } -/* line 328, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-center:before { content: "\f037"; } -/* line 331, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-right:before { content: "\f038"; } -/* line 334, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-align-justify:before { content: "\f039"; } -/* line 337, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list:before { content: "\f03a"; } -/* line 340, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dedent:before, #hrjob-contract .fa-outdent:before { content: "\f03b"; } -/* line 344, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-indent:before { content: "\f03c"; } -/* line 347, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-video-camera:before { content: "\f03d"; } -/* line 350, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-photo:before, #hrjob-contract .fa-image:before, #hrjob-contract .fa-picture-o:before { content: "\f03e"; } -/* line 355, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pencil:before { content: "\f040"; } -/* line 358, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-map-marker:before { content: "\f041"; } -/* line 361, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-adjust:before { content: "\f042"; } -/* line 364, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tint:before { content: "\f043"; } -/* line 367, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-edit:before, #hrjob-contract .fa-pencil-square-o:before { content: "\f044"; } -/* line 371, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-square-o:before { content: "\f045"; } -/* line 374, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-square-o:before { content: "\f046"; } -/* line 377, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows:before { content: "\f047"; } -/* line 380, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-step-backward:before { content: "\f048"; } -/* line 383, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fast-backward:before { content: "\f049"; } -/* line 386, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-backward:before { content: "\f04a"; } -/* line 389, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-play:before { content: "\f04b"; } -/* line 392, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pause:before { content: "\f04c"; } -/* line 395, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stop:before { content: "\f04d"; } -/* line 398, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-forward:before { content: "\f04e"; } -/* line 401, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fast-forward:before { content: "\f050"; } -/* line 404, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-step-forward:before { content: "\f051"; } -/* line 407, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eject:before { content: "\f052"; } -/* line 410, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-left:before { content: "\f053"; } -/* line 413, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-right:before { content: "\f054"; } -/* line 416, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus-circle:before { content: "\f055"; } -/* line 419, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus-circle:before { content: "\f056"; } -/* line 422, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-times-circle:before { content: "\f057"; } -/* line 425, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-circle:before { content: "\f058"; } -/* line 428, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-question-circle:before { content: "\f059"; } -/* line 431, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-info-circle:before { content: "\f05a"; } -/* line 434, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-crosshairs:before { content: "\f05b"; } -/* line 437, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-times-circle-o:before { content: "\f05c"; } -/* line 440, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-circle-o:before { content: "\f05d"; } -/* line 443, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ban:before { content: "\f05e"; } -/* line 446, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-left:before { content: "\f060"; } -/* line 449, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-right:before { content: "\f061"; } -/* line 452, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-up:before { content: "\f062"; } -/* line 455, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-down:before { content: "\f063"; } -/* line 458, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mail-forward:before, #hrjob-contract .fa-share:before { content: "\f064"; } -/* line 462, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-expand:before { content: "\f065"; } -/* line 465, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-compress:before { content: "\f066"; } -/* line 468, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus:before { content: "\f067"; } -/* line 471, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus:before { content: "\f068"; } -/* line 474, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-asterisk:before { content: "\f069"; } -/* line 477, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-exclamation-circle:before { content: "\f06a"; } -/* line 480, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gift:before { content: "\f06b"; } -/* line 483, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-leaf:before { content: "\f06c"; } -/* line 486, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fire:before { content: "\f06d"; } -/* line 489, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eye:before { content: "\f06e"; } -/* line 492, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eye-slash:before { content: "\f070"; } -/* line 495, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-warning:before, #hrjob-contract .fa-exclamation-triangle:before { content: "\f071"; } -/* line 499, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plane:before { content: "\f072"; } -/* line 502, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-calendar:before { content: "\f073"; } -/* line 505, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-random:before { content: "\f074"; } -/* line 508, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comment:before { content: "\f075"; } -/* line 511, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-magnet:before { content: "\f076"; } -/* line 514, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-up:before { content: "\f077"; } -/* line 517, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-down:before { content: "\f078"; } -/* line 520, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-retweet:before { content: "\f079"; } -/* line 523, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-shopping-cart:before { content: "\f07a"; } -/* line 526, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder:before { content: "\f07b"; } -/* line 529, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder-open:before { content: "\f07c"; } -/* line 532, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows-v:before { content: "\f07d"; } -/* line 535, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows-h:before { content: "\f07e"; } -/* line 538, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bar-chart-o:before, #hrjob-contract .fa-bar-chart:before { content: "\f080"; } -/* line 542, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-twitter-square:before { content: "\f081"; } -/* line 545, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-facebook-square:before { content: "\f082"; } -/* line 548, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-camera-retro:before { content: "\f083"; } -/* line 551, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-key:before { content: "\f084"; } -/* line 554, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gears:before, #hrjob-contract .fa-cogs:before { content: "\f085"; } -/* line 558, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comments:before { content: "\f086"; } -/* line 561, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-o-up:before { content: "\f087"; } -/* line 564, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-o-down:before { content: "\f088"; } -/* line 567, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star-half:before { content: "\f089"; } -/* line 570, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-heart-o:before { content: "\f08a"; } -/* line 573, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sign-out:before { content: "\f08b"; } -/* line 576, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-linkedin-square:before { content: "\f08c"; } -/* line 579, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumb-tack:before { content: "\f08d"; } -/* line 582, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-external-link:before { content: "\f08e"; } -/* line 585, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sign-in:before { content: "\f090"; } -/* line 588, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trophy:before { content: "\f091"; } -/* line 591, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-github-square:before { content: "\f092"; } -/* line 594, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-upload:before { content: "\f093"; } -/* line 597, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lemon-o:before { content: "\f094"; } -/* line 600, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-phone:before { content: "\f095"; } -/* line 603, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-square-o:before { content: "\f096"; } -/* line 606, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bookmark-o:before { content: "\f097"; } -/* line 609, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-phone-square:before { content: "\f098"; } -/* line 612, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-twitter:before { content: "\f099"; } -/* line 615, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-facebook:before { content: "\f09a"; } -/* line 618, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-github:before { content: "\f09b"; } -/* line 621, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unlock:before { content: "\f09c"; } -/* line 624, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-credit-card:before { content: "\f09d"; } -/* line 627, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rss:before { content: "\f09e"; } -/* line 630, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hdd-o:before { content: "\f0a0"; } -/* line 633, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bullhorn:before { content: "\f0a1"; } -/* line 636, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell:before { content: "\f0f3"; } -/* line 639, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-certificate:before { content: "\f0a3"; } -/* line 642, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-right:before { content: "\f0a4"; } -/* line 645, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-left:before { content: "\f0a5"; } -/* line 648, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-up:before { content: "\f0a6"; } -/* line 651, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hand-o-down:before { content: "\f0a7"; } -/* line 654, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-left:before { content: "\f0a8"; } -/* line 657, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-right:before { content: "\f0a9"; } -/* line 660, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-up:before { content: "\f0aa"; } -/* line 663, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-down:before { content: "\f0ab"; } -/* line 666, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-globe:before { content: "\f0ac"; } -/* line 669, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wrench:before { content: "\f0ad"; } -/* line 672, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tasks:before { content: "\f0ae"; } -/* line 675, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-filter:before { content: "\f0b0"; } -/* line 678, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-briefcase:before { content: "\f0b1"; } -/* line 681, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrows-alt:before { content: "\f0b2"; } -/* line 684, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-group:before, #hrjob-contract .fa-users:before { content: "\f0c0"; } -/* line 688, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chain:before, #hrjob-contract .fa-link:before { content: "\f0c1"; } -/* line 692, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cloud:before { content: "\f0c2"; } -/* line 695, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flask:before { content: "\f0c3"; } -/* line 698, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cut:before, #hrjob-contract .fa-scissors:before { content: "\f0c4"; } -/* line 702, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-copy:before, #hrjob-contract .fa-files-o:before { content: "\f0c5"; } -/* line 706, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paperclip:before { content: "\f0c6"; } -/* line 709, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-save:before, #hrjob-contract .fa-floppy-o:before { content: "\f0c7"; } -/* line 713, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-square:before { content: "\f0c8"; } -/* line 716, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-navicon:before, #hrjob-contract .fa-reorder:before, #hrjob-contract .fa-bars:before { content: "\f0c9"; } -/* line 721, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list-ul:before { content: "\f0ca"; } -/* line 724, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-list-ol:before { content: "\f0cb"; } -/* line 727, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-strikethrough:before { content: "\f0cc"; } -/* line 730, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-underline:before { content: "\f0cd"; } -/* line 733, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-table:before { content: "\f0ce"; } -/* line 736, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-magic:before { content: "\f0d0"; } -/* line 739, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-truck:before { content: "\f0d1"; } -/* line 742, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pinterest:before { content: "\f0d2"; } -/* line 745, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pinterest-square:before { content: "\f0d3"; } -/* line 748, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google-plus-square:before { content: "\f0d4"; } -/* line 751, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google-plus:before { content: "\f0d5"; } -/* line 754, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-money:before { content: "\f0d6"; } -/* line 757, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-down:before { content: "\f0d7"; } -/* line 760, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-up:before { content: "\f0d8"; } -/* line 763, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-left:before { content: "\f0d9"; } -/* line 766, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-caret-right:before { content: "\f0da"; } -/* line 769, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-columns:before { content: "\f0db"; } -/* line 772, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unsorted:before, #hrjob-contract .fa-sort:before { content: "\f0dc"; } -/* line 776, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-down:before, #hrjob-contract .fa-sort-desc:before { content: "\f0dd"; } -/* line 780, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-up:before, #hrjob-contract .fa-sort-asc:before { content: "\f0de"; } -/* line 784, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-envelope:before { content: "\f0e0"; } -/* line 787, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-linkedin:before { content: "\f0e1"; } -/* line 790, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rotate-left:before, #hrjob-contract .fa-undo:before { content: "\f0e2"; } -/* line 794, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-legal:before, #hrjob-contract .fa-gavel:before { content: "\f0e3"; } -/* line 798, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dashboard:before, #hrjob-contract .fa-tachometer:before { content: "\f0e4"; } -/* line 802, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comment-o:before { content: "\f0e5"; } -/* line 805, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-comments-o:before { content: "\f0e6"; } -/* line 808, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flash:before, #hrjob-contract .fa-bolt:before { content: "\f0e7"; } -/* line 812, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sitemap:before { content: "\f0e8"; } -/* line 815, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-umbrella:before { content: "\f0e9"; } -/* line 818, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paste:before, #hrjob-contract .fa-clipboard:before { content: "\f0ea"; } -/* line 822, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lightbulb-o:before { content: "\f0eb"; } -/* line 825, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-exchange:before { content: "\f0ec"; } -/* line 828, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cloud-download:before { content: "\f0ed"; } -/* line 831, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cloud-upload:before { content: "\f0ee"; } -/* line 834, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-user-md:before { content: "\f0f0"; } -/* line 837, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stethoscope:before { content: "\f0f1"; } -/* line 840, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-suitcase:before { content: "\f0f2"; } -/* line 843, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell-o:before { content: "\f0a2"; } -/* line 846, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-coffee:before { content: "\f0f4"; } -/* line 849, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cutlery:before { content: "\f0f5"; } -/* line 852, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-text-o:before { content: "\f0f6"; } -/* line 855, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-building-o:before { content: "\f0f7"; } -/* line 858, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hospital-o:before { content: "\f0f8"; } -/* line 861, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ambulance:before { content: "\f0f9"; } -/* line 864, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-medkit:before { content: "\f0fa"; } -/* line 867, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fighter-jet:before { content: "\f0fb"; } -/* line 870, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-beer:before { content: "\f0fc"; } -/* line 873, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-h-square:before { content: "\f0fd"; } -/* line 876, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus-square:before { content: "\f0fe"; } -/* line 879, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-left:before { content: "\f100"; } -/* line 882, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-right:before { content: "\f101"; } -/* line 885, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-up:before { content: "\f102"; } -/* line 888, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-double-down:before { content: "\f103"; } -/* line 891, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-left:before { content: "\f104"; } -/* line 894, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-right:before { content: "\f105"; } -/* line 897, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-up:before { content: "\f106"; } -/* line 900, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angle-down:before { content: "\f107"; } -/* line 903, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-desktop:before { content: "\f108"; } -/* line 906, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-laptop:before { content: "\f109"; } -/* line 909, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tablet:before { content: "\f10a"; } -/* line 912, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mobile-phone:before, #hrjob-contract .fa-mobile:before { content: "\f10b"; } -/* line 916, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle-o:before { content: "\f10c"; } -/* line 919, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-quote-left:before { content: "\f10d"; } -/* line 922, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-quote-right:before { content: "\f10e"; } -/* line 925, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spinner:before { content: "\f110"; } -/* line 928, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle:before { content: "\f111"; } -/* line 931, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mail-reply:before, #hrjob-contract .fa-reply:before { content: "\f112"; } -/* line 935, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-github-alt:before { content: "\f113"; } -/* line 938, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder-o:before { content: "\f114"; } -/* line 941, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-folder-open-o:before { content: "\f115"; } -/* line 944, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-smile-o:before { content: "\f118"; } -/* line 947, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-frown-o:before { content: "\f119"; } -/* line 950, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-meh-o:before { content: "\f11a"; } -/* line 953, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gamepad:before { content: "\f11b"; } -/* line 956, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-keyboard-o:before { content: "\f11c"; } -/* line 959, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flag-o:before { content: "\f11d"; } -/* line 962, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flag-checkered:before { content: "\f11e"; } -/* line 965, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-terminal:before { content: "\f120"; } -/* line 968, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-code:before { content: "\f121"; } -/* line 971, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mail-reply-all:before, #hrjob-contract .fa-reply-all:before { content: "\f122"; } -/* line 975, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-star-half-empty:before, #hrjob-contract .fa-star-half-full:before, #hrjob-contract .fa-star-half-o:before { content: "\f123"; } -/* line 980, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-location-arrow:before { content: "\f124"; } -/* line 983, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-crop:before { content: "\f125"; } -/* line 986, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-code-fork:before { content: "\f126"; } -/* line 989, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unlink:before, #hrjob-contract .fa-chain-broken:before { content: "\f127"; } -/* line 993, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-question:before { content: "\f128"; } -/* line 996, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-info:before { content: "\f129"; } -/* line 999, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-exclamation:before { content: "\f12a"; } -/* line 1002, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-superscript:before { content: "\f12b"; } -/* line 1005, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-subscript:before { content: "\f12c"; } -/* line 1008, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eraser:before { content: "\f12d"; } -/* line 1011, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-puzzle-piece:before { content: "\f12e"; } -/* line 1014, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-microphone:before { content: "\f130"; } -/* line 1017, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-microphone-slash:before { content: "\f131"; } -/* line 1020, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-shield:before { content: "\f132"; } -/* line 1023, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-calendar-o:before { content: "\f133"; } -/* line 1026, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fire-extinguisher:before { content: "\f134"; } -/* line 1029, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rocket:before { content: "\f135"; } -/* line 1032, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-maxcdn:before { content: "\f136"; } -/* line 1035, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-left:before { content: "\f137"; } -/* line 1038, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-right:before { content: "\f138"; } -/* line 1041, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-up:before { content: "\f139"; } -/* line 1044, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-chevron-circle-down:before { content: "\f13a"; } -/* line 1047, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-html5:before { content: "\f13b"; } -/* line 1050, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-css3:before { content: "\f13c"; } -/* line 1053, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-anchor:before { content: "\f13d"; } -/* line 1056, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-unlock-alt:before { content: "\f13e"; } -/* line 1059, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bullseye:before { content: "\f140"; } -/* line 1062, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ellipsis-h:before { content: "\f141"; } -/* line 1065, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ellipsis-v:before { content: "\f142"; } -/* line 1068, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rss-square:before { content: "\f143"; } -/* line 1071, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-play-circle:before { content: "\f144"; } -/* line 1074, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ticket:before { content: "\f145"; } -/* line 1077, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus-square:before { content: "\f146"; } -/* line 1080, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-minus-square-o:before { content: "\f147"; } -/* line 1083, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-level-up:before { content: "\f148"; } -/* line 1086, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-level-down:before { content: "\f149"; } -/* line 1089, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-check-square:before { content: "\f14a"; } -/* line 1092, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pencil-square:before { content: "\f14b"; } -/* line 1095, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-external-link-square:before { content: "\f14c"; } -/* line 1098, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-square:before { content: "\f14d"; } -/* line 1101, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-compass:before { content: "\f14e"; } -/* line 1104, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-down:before, #hrjob-contract .fa-caret-square-o-down:before { content: "\f150"; } -/* line 1108, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-up:before, #hrjob-contract .fa-caret-square-o-up:before { content: "\f151"; } -/* line 1112, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-right:before, #hrjob-contract .fa-caret-square-o-right:before { content: "\f152"; } -/* line 1116, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-euro:before, #hrjob-contract .fa-eur:before { content: "\f153"; } -/* line 1120, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gbp:before { content: "\f154"; } -/* line 1123, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dollar:before, #hrjob-contract .fa-usd:before { content: "\f155"; } -/* line 1127, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-rupee:before, #hrjob-contract .fa-inr:before { content: "\f156"; } -/* line 1131, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cny:before, #hrjob-contract .fa-rmb:before, #hrjob-contract .fa-yen:before, #hrjob-contract .fa-jpy:before { content: "\f157"; } -/* line 1137, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ruble:before, #hrjob-contract .fa-rouble:before, #hrjob-contract .fa-rub:before { content: "\f158"; } -/* line 1142, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-won:before, #hrjob-contract .fa-krw:before { content: "\f159"; } -/* line 1146, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bitcoin:before, #hrjob-contract .fa-btc:before { content: "\f15a"; } -/* line 1150, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file:before { content: "\f15b"; } -/* line 1153, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-text:before { content: "\f15c"; } -/* line 1156, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-alpha-asc:before { content: "\f15d"; } -/* line 1159, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-alpha-desc:before { content: "\f15e"; } -/* line 1162, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-amount-asc:before { content: "\f160"; } -/* line 1165, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-amount-desc:before { content: "\f161"; } -/* line 1168, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-numeric-asc:before { content: "\f162"; } -/* line 1171, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sort-numeric-desc:before { content: "\f163"; } -/* line 1174, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-up:before { content: "\f164"; } -/* line 1177, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-thumbs-down:before { content: "\f165"; } -/* line 1180, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-youtube-square:before { content: "\f166"; } -/* line 1183, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-youtube:before { content: "\f167"; } -/* line 1186, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-xing:before { content: "\f168"; } -/* line 1189, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-xing-square:before { content: "\f169"; } -/* line 1192, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-youtube-play:before { content: "\f16a"; } -/* line 1195, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dropbox:before { content: "\f16b"; } -/* line 1198, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-overflow:before { content: "\f16c"; } -/* line 1201, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-instagram:before { content: "\f16d"; } -/* line 1204, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-flickr:before { content: "\f16e"; } -/* line 1207, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-adn:before { content: "\f170"; } -/* line 1210, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bitbucket:before { content: "\f171"; } -/* line 1213, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bitbucket-square:before { content: "\f172"; } -/* line 1216, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tumblr:before { content: "\f173"; } -/* line 1219, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tumblr-square:before { content: "\f174"; } -/* line 1222, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-down:before { content: "\f175"; } -/* line 1225, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-up:before { content: "\f176"; } -/* line 1228, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-left:before { content: "\f177"; } -/* line 1231, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-long-arrow-right:before { content: "\f178"; } -/* line 1234, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-apple:before { content: "\f179"; } -/* line 1237, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-windows:before { content: "\f17a"; } -/* line 1240, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-android:before { content: "\f17b"; } -/* line 1243, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-linux:before { content: "\f17c"; } -/* line 1246, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dribbble:before { content: "\f17d"; } -/* line 1249, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-skype:before { content: "\f17e"; } -/* line 1252, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-foursquare:before { content: "\f180"; } -/* line 1255, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trello:before { content: "\f181"; } -/* line 1258, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-female:before { content: "\f182"; } -/* line 1261, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-male:before { content: "\f183"; } -/* line 1264, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-gittip:before { content: "\f184"; } -/* line 1267, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sun-o:before { content: "\f185"; } -/* line 1270, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-moon-o:before { content: "\f186"; } -/* line 1273, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-archive:before { content: "\f187"; } -/* line 1276, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bug:before { content: "\f188"; } -/* line 1279, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-vk:before { content: "\f189"; } -/* line 1282, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-weibo:before { content: "\f18a"; } -/* line 1285, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-renren:before { content: "\f18b"; } -/* line 1288, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pagelines:before { content: "\f18c"; } -/* line 1291, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stack-exchange:before { content: "\f18d"; } -/* line 1294, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-right:before { content: "\f18e"; } -/* line 1297, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-arrow-circle-o-left:before { content: "\f190"; } -/* line 1300, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-left:before, #hrjob-contract .fa-caret-square-o-left:before { content: "\f191"; } -/* line 1304, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-dot-circle-o:before { content: "\f192"; } -/* line 1307, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wheelchair:before { content: "\f193"; } -/* line 1310, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-vimeo-square:before { content: "\f194"; } -/* line 1313, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-turkish-lira:before, #hrjob-contract .fa-try:before { content: "\f195"; } -/* line 1317, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plus-square-o:before { content: "\f196"; } -/* line 1320, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-space-shuttle:before { content: "\f197"; } -/* line 1323, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-slack:before { content: "\f198"; } -/* line 1326, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-envelope-square:before { content: "\f199"; } -/* line 1329, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wordpress:before { content: "\f19a"; } -/* line 1332, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-openid:before { content: "\f19b"; } -/* line 1335, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-institution:before, #hrjob-contract .fa-bank:before, #hrjob-contract .fa-university:before { content: "\f19c"; } -/* line 1340, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-mortar-board:before, #hrjob-contract .fa-graduation-cap:before { content: "\f19d"; } -/* line 1344, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-yahoo:before { content: "\f19e"; } -/* line 1347, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google:before { content: "\f1a0"; } -/* line 1350, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-reddit:before { content: "\f1a1"; } -/* line 1353, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-reddit-square:before { content: "\f1a2"; } -/* line 1356, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stumbleupon-circle:before { content: "\f1a3"; } -/* line 1359, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-stumbleupon:before { content: "\f1a4"; } -/* line 1362, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-delicious:before { content: "\f1a5"; } -/* line 1365, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-digg:before { content: "\f1a6"; } -/* line 1368, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pied-piper:before { content: "\f1a7"; } -/* line 1371, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pied-piper-alt:before { content: "\f1a8"; } -/* line 1374, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-drupal:before { content: "\f1a9"; } -/* line 1377, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-joomla:before { content: "\f1aa"; } -/* line 1380, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-language:before { content: "\f1ab"; } -/* line 1383, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-fax:before { content: "\f1ac"; } -/* line 1386, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-building:before { content: "\f1ad"; } -/* line 1389, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-child:before { content: "\f1ae"; } -/* line 1392, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paw:before { content: "\f1b0"; } -/* line 1395, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spoon:before { content: "\f1b1"; } -/* line 1398, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cube:before { content: "\f1b2"; } -/* line 1401, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cubes:before { content: "\f1b3"; } -/* line 1404, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-behance:before { content: "\f1b4"; } -/* line 1407, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-behance-square:before { content: "\f1b5"; } -/* line 1410, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-steam:before { content: "\f1b6"; } -/* line 1413, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-steam-square:before { content: "\f1b7"; } -/* line 1416, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-recycle:before { content: "\f1b8"; } -/* line 1419, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-automobile:before, #hrjob-contract .fa-car:before { content: "\f1b9"; } -/* line 1423, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cab:before, #hrjob-contract .fa-taxi:before { content: "\f1ba"; } -/* line 1427, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tree:before { content: "\f1bb"; } -/* line 1430, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-spotify:before { content: "\f1bc"; } -/* line 1433, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-deviantart:before { content: "\f1bd"; } -/* line 1436, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-soundcloud:before { content: "\f1be"; } -/* line 1439, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-database:before { content: "\f1c0"; } -/* line 1442, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-pdf-o:before { content: "\f1c1"; } -/* line 1445, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-word-o:before { content: "\f1c2"; } -/* line 1448, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-excel-o:before { content: "\f1c3"; } -/* line 1451, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-powerpoint-o:before { content: "\f1c4"; } -/* line 1454, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-photo-o:before, #hrjob-contract .fa-file-picture-o:before, #hrjob-contract .fa-file-image-o:before { content: "\f1c5"; } -/* line 1459, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-zip-o:before, #hrjob-contract .fa-file-archive-o:before { content: "\f1c6"; } -/* line 1463, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-sound-o:before, #hrjob-contract .fa-file-audio-o:before { content: "\f1c7"; } -/* line 1467, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-movie-o:before, #hrjob-contract .fa-file-video-o:before { content: "\f1c8"; } -/* line 1471, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-file-code-o:before { content: "\f1c9"; } -/* line 1474, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-vine:before { content: "\f1ca"; } -/* line 1477, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-codepen:before { content: "\f1cb"; } -/* line 1480, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-jsfiddle:before { content: "\f1cc"; } -/* line 1483, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-life-bouy:before, #hrjob-contract .fa-life-buoy:before, #hrjob-contract .fa-life-saver:before, @@ -3236,264 +2521,202 @@ #hrjob-contract .fa-life-ring:before { content: "\f1cd"; } -/* line 1490, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle-o-notch:before { content: "\f1ce"; } -/* line 1493, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ra:before, #hrjob-contract .fa-rebel:before { content: "\f1d0"; } -/* line 1497, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ge:before, #hrjob-contract .fa-empire:before { content: "\f1d1"; } -/* line 1501, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-git-square:before { content: "\f1d2"; } -/* line 1504, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-git:before { content: "\f1d3"; } -/* line 1507, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-hacker-news:before { content: "\f1d4"; } -/* line 1510, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tencent-weibo:before { content: "\f1d5"; } -/* line 1513, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-qq:before { content: "\f1d6"; } -/* line 1516, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wechat:before, #hrjob-contract .fa-weixin:before { content: "\f1d7"; } -/* line 1520, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-send:before, #hrjob-contract .fa-paper-plane:before { content: "\f1d8"; } -/* line 1524, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-send-o:before, #hrjob-contract .fa-paper-plane-o:before { content: "\f1d9"; } -/* line 1528, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-history:before { content: "\f1da"; } -/* line 1531, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-circle-thin:before { content: "\f1db"; } -/* line 1534, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-header:before { content: "\f1dc"; } -/* line 1537, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paragraph:before { content: "\f1dd"; } -/* line 1540, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-sliders:before { content: "\f1de"; } -/* line 1543, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-alt:before { content: "\f1e0"; } -/* line 1546, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-share-alt-square:before { content: "\f1e1"; } -/* line 1549, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bomb:before { content: "\f1e2"; } -/* line 1552, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-soccer-ball-o:before, #hrjob-contract .fa-futbol-o:before { content: "\f1e3"; } -/* line 1556, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-tty:before { content: "\f1e4"; } -/* line 1559, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-binoculars:before { content: "\f1e5"; } -/* line 1562, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-plug:before { content: "\f1e6"; } -/* line 1565, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-slideshare:before { content: "\f1e7"; } -/* line 1568, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-twitch:before { content: "\f1e8"; } -/* line 1571, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-yelp:before { content: "\f1e9"; } -/* line 1574, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-newspaper-o:before { content: "\f1ea"; } -/* line 1577, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-wifi:before { content: "\f1eb"; } -/* line 1580, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-calculator:before { content: "\f1ec"; } -/* line 1583, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paypal:before { content: "\f1ed"; } -/* line 1586, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-google-wallet:before { content: "\f1ee"; } -/* line 1589, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-visa:before { content: "\f1f0"; } -/* line 1592, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-mastercard:before { content: "\f1f1"; } -/* line 1595, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-discover:before { content: "\f1f2"; } -/* line 1598, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-amex:before { content: "\f1f3"; } -/* line 1601, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-paypal:before { content: "\f1f4"; } -/* line 1604, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc-stripe:before { content: "\f1f5"; } -/* line 1607, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell-slash:before { content: "\f1f6"; } -/* line 1610, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bell-slash-o:before { content: "\f1f7"; } -/* line 1613, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-trash:before { content: "\f1f8"; } -/* line 1616, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-copyright:before { content: "\f1f9"; } -/* line 1619, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-at:before { content: "\f1fa"; } -/* line 1622, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-eyedropper:before { content: "\f1fb"; } -/* line 1625, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-paint-brush:before { content: "\f1fc"; } -/* line 1628, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-birthday-cake:before { content: "\f1fd"; } -/* line 1631, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-area-chart:before { content: "\f1fe"; } -/* line 1634, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-pie-chart:before { content: "\f200"; } -/* line 1637, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-line-chart:before { content: "\f201"; } -/* line 1640, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lastfm:before { content: "\f202"; } -/* line 1643, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-lastfm-square:before { content: "\f203"; } -/* line 1646, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-off:before { content: "\f204"; } -/* line 1649, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-toggle-on:before { content: "\f205"; } -/* line 1652, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bicycle:before { content: "\f206"; } -/* line 1655, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-bus:before { content: "\f207"; } -/* line 1658, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-ioxhost:before { content: "\f208"; } -/* line 1661, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-angellist:before { content: "\f209"; } -/* line 1664, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-cc:before { content: "\f20a"; } -/* line 1667, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-shekel:before, #hrjob-contract .fa-sheqel:before, #hrjob-contract .fa-ils:before { content: "\f20b"; } -/* line 1672, ../scss/civihr/modules/_fontawesome.scss */ #hrjob-contract .fa-meanpath:before { content: "\f20c"; } -/* line 12, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -/* line 15, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract *:before, #hrjob-contract *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -/* line 26, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .container-fluid, #hrjob-contract .container { font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; @@ -3501,7 +2724,6 @@ line-height: 1.42857143; color: #4D4D69; } -/* line 35, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract input, #hrjob-contract button, #hrjob-contract select, @@ -3511,40 +2733,32 @@ font-size: inherit; line-height: inherit; } -/* line 48, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract a { color: #0071BD; text-decoration: none; } -/* line 52, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract a:hover, #hrjob-contract a:focus { color: #005c99; text-decoration: none; } -/* line 58, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract a:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -/* line 69, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract figure { margin: 0; } -/* line 76, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract img { vertical-align: middle; } -/* line 81, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-responsive { display: block; max-width: 100%; height: auto; } -/* line 86, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-rounded { border-radius: 4px; } -/* line 93, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-thumbnail { padding: 4px; line-height: 1.42857143; @@ -3558,18 +2772,15 @@ max-width: 100%; height: auto; } -/* line 106, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .img-circle { border-radius: 50%; } -/* line 113, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract hr { margin-top: 18px; margin-bottom: 18px; border: 0; border-top: 1px solid #D3DEE2; } -/* line 125, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .sr-only { position: absolute; width: 1px; @@ -3580,7 +2791,6 @@ clip: rect(0, 0, 0, 0); border: 0; } -/* line 141, ../scss/civihr/bootstrap/_scaffolding-custom.scss */ #hrjob-contract .sr-only-focusable:active, #hrjob-contract .sr-only-focusable:focus { position: static; width: auto; @@ -3589,7 +2799,6 @@ overflow: visible; clip: auto; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1, #hrjob-contract h2, #hrjob-contract h3, #hrjob-contract h4, #hrjob-contract h5, #hrjob-contract h6, #hrjob-contract .h1, #hrjob-contract .h2, #hrjob-contract .h3, #hrjob-contract .h4, #hrjob-contract .h5, #hrjob-contract .h6 { font-family: inherit; @@ -3597,7 +2806,6 @@ line-height: 1.1; color: #464354; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1 small, #hrjob-contract h1 .small, #hrjob-contract h2 small, #hrjob-contract h2 .small, #hrjob-contract h3 small, @@ -3616,14 +2824,12 @@ line-height: 1; color: #E8EEF0; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1, #hrjob-contract .h1, #hrjob-contract h2, #hrjob-contract .h2, #hrjob-contract h3, #hrjob-contract .h3 { margin-top: 18px; margin-bottom: 9px; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1 small, #hrjob-contract h1 .small, #hrjob-contract .h1 small, #hrjob-contract .h1 .small, @@ -3635,14 +2841,12 @@ #hrjob-contract .h3 .small { font-size: 65%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h4, #hrjob-contract .h4, #hrjob-contract h5, #hrjob-contract .h5, #hrjob-contract h6, #hrjob-contract .h6 { margin-top: 9px; margin-bottom: 9px; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h4 small, #hrjob-contract h4 .small, #hrjob-contract .h4 small, #hrjob-contract .h4 .small, @@ -3654,35 +2858,27 @@ #hrjob-contract .h6 .small { font-size: 75%; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h1, #hrjob-contract .h1 { font-size: 24px; } -/* line 48, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h2, #hrjob-contract .h2 { font-size: 18px; } -/* line 49, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h3, #hrjob-contract .h3 { font-size: 13px; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h4, #hrjob-contract .h4 { font-size: 13px; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h5, #hrjob-contract .h5 { font-size: 13px; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract h6, #hrjob-contract .h6 { font-size: 12px; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract p { margin: 0 0 9px; } -/* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .lead { margin-bottom: 18px; font-size: 14px; @@ -3690,217 +2886,171 @@ line-height: 1.4; } @media (min-width: 768px) { - /* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .lead { font-size: 19.5px; } } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract small, #hrjob-contract .small { font-size: 92%; } -/* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract mark, #hrjob-contract .mark { background-color: #fcf8e3; padding: .2em; } -/* line 90, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-left { text-align: left; } -/* line 91, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-right { text-align: right; } -/* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-center { text-align: center; } -/* line 93, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-justify { text-align: justify; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-nowrap { white-space: nowrap; } -/* line 97, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-lowercase { text-transform: lowercase; } -/* line 98, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-uppercase, #hrjob-contract .initialism { text-transform: uppercase; } -/* line 99, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-capitalize { text-transform: capitalize; } -/* line 102, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .text-muted { color: #9494A5; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-primary { color: #0071BD; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-primary:hover, #hrjob-contract a.text-primary:focus { color: #00538a; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-success { color: #4d994d; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-success:hover, #hrjob-contract a.text-success:focus { color: #3c773c; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-info { color: #31708f; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-info:hover, #hrjob-contract a.text-info:focus { color: #245269; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-warning { color: #bf5900; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-warning:hover, #hrjob-contract a.text-warning:focus { color: #8c4100; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-danger { color: #CF3458; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-danger:hover, #hrjob-contract a.text-danger:focus { color: #a82846; } -/* line 119, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .bg-primary { color: #fff; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-primary { background-color: #0071BD; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-primary:hover, #hrjob-contract a.bg-primary:focus { background-color: #00538a; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-success { background-color: #dff0d8; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-success:hover, #hrjob-contract a.bg-success:focus { background-color: #c1e2b3; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-info { background-color: #d9edf7; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-info:hover, #hrjob-contract a.bg-info:focus { background-color: #afd9ee; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-warning { background-color: #fcf8e3; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-warning:hover, #hrjob-contract a.bg-warning:focus { background-color: #f7ecb5; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract .bg-danger { background-color: #f2dede; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_background-variant.scss */ #hrjob-contract a.bg-danger:hover, #hrjob-contract a.bg-danger:focus { background-color: #e4b9b9; } -/* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .page-header { padding-bottom: 8px; margin: 36px 0 18px; border-bottom: 1px solid #F3F6F7; } -/* line 149, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract ul, #hrjob-contract ol { margin-top: 0; margin-bottom: 9px; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract ul ul, #hrjob-contract ul ol, #hrjob-contract ol ul, #hrjob-contract ol ol { margin-bottom: 0; } -/* line 167, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .list-unstyled { padding-left: 0; list-style: none; } -/* line 173, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .list-inline { padding-left: 0; list-style: none; margin-left: -5px; } -/* line 177, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .list-inline > li { display: inline-block; padding-left: 5px; padding-right: 5px; } -/* line 185, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dl { margin-top: 0; margin-bottom: 18px; } -/* line 189, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dt, #hrjob-contract dd { line-height: 1.42857143; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dt { font-weight: bold; } -/* line 196, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract dd { margin-left: 0; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .dl-horizontal dd:before, #hrjob-contract .dl-horizontal dd:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .dl-horizontal dd:after { clear: both; } @media (min-width: 768px) { - /* line 211, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .dl-horizontal dt { float: left; width: 160px; @@ -3910,35 +3060,29 @@ text-overflow: ellipsis; white-space: nowrap; } - /* line 218, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .dl-horizontal dd { margin-left: 180px; } } -/* line 229, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract abbr[title], #hrjob-contract abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #E8EEF0; } -/* line 235, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .initialism { font-size: 90%; } -/* line 241, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote { padding: 9px 18px; margin: 0 0 18px; font-size: 16.25px; border-left: 5px solid #F3F6F7; } -/* line 250, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote p:last-child, #hrjob-contract blockquote ul:last-child, #hrjob-contract blockquote ol:last-child { margin-bottom: 0; } -/* line 257, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote footer, #hrjob-contract blockquote small, #hrjob-contract blockquote .small { @@ -3947,13 +3091,11 @@ line-height: 1.42857143; color: #E8EEF0; } -/* line 265, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract blockquote footer:before, #hrjob-contract blockquote small:before, #hrjob-contract blockquote .small:before { content: '\2014 \00A0'; } -/* line 274, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .blockquote-reverse, #hrjob-contract blockquote.pull-right { padding-right: 15px; @@ -3962,7 +3104,6 @@ border-left: 0; text-align: right; } -/* line 286, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .blockquote-reverse footer:before, #hrjob-contract .blockquote-reverse small:before, #hrjob-contract .blockquote-reverse .small:before, @@ -3971,7 +3112,6 @@ #hrjob-contract blockquote.pull-right .small:before { content: ''; } -/* line 287, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract .blockquote-reverse footer:after, #hrjob-contract .blockquote-reverse small:after, #hrjob-contract .blockquote-reverse .small:after, @@ -3980,20 +3120,17 @@ #hrjob-contract blockquote.pull-right .small:after { content: '\00A0 \2014'; } -/* line 294, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_type.scss */ #hrjob-contract address { margin-bottom: 18px; font-style: normal; line-height: 1.42857143; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract code, #hrjob-contract kbd, #hrjob-contract pre, #hrjob-contract samp { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract code { padding: 2px 4px; font-size: 90%; @@ -4001,7 +3138,6 @@ background-color: #f9f2f4; border-radius: 2px; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract kbd { padding: 2px 4px; font-size: 90%; @@ -4010,14 +3146,12 @@ border-radius: 2px; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract kbd kbd { padding: 0; font-size: 100%; font-weight: bold; box-shadow: none; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract pre { display: block; padding: 8.5px; @@ -4031,7 +3165,6 @@ border: 1px solid #ccc; border-radius: 2px; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract pre code { padding: 0; font-size: inherit; @@ -4040,942 +3173,715 @@ background-color: transparent; border-radius: 0; } -/* line 66, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_code.scss */ #hrjob-contract .pre-scrollable { max-height: 340px; overflow-y: scroll; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container:before, #hrjob-contract .container:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container:after { clear: both; } @media (min-width: 768px) { - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { width: 750px; } } @media (min-width: 992px) { - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { width: 970px; } } @media (min-width: 1200px) { - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container { width: 1170px; } } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .container-fluid { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container-fluid:before, #hrjob-contract .container-fluid:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .container-fluid:after { clear: both; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_grid.scss */ #hrjob-contract .row { margin-left: -15px; margin-right: -15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .row:before, #hrjob-contract .row:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .row:after { clear: both; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-1, #hrjob-contract .col-sm-1, #hrjob-contract .col-md-1, #hrjob-contract .col-lg-1, #hrjob-contract .col-xs-2, #hrjob-contract .col-sm-2, #hrjob-contract .col-md-2, #hrjob-contract .col-lg-2, #hrjob-contract .col-xs-3, #hrjob-contract .col-sm-3, #hrjob-contract .col-md-3, #hrjob-contract .col-lg-3, #hrjob-contract .col-xs-4, #hrjob-contract .col-sm-4, #hrjob-contract .col-md-4, #hrjob-contract .col-lg-4, #hrjob-contract .col-xs-5, #hrjob-contract .col-sm-5, #hrjob-contract .col-md-5, #hrjob-contract .col-lg-5, #hrjob-contract .col-xs-6, #hrjob-contract .col-sm-6, #hrjob-contract .col-md-6, #hrjob-contract .col-lg-6, #hrjob-contract .col-xs-7, #hrjob-contract .col-sm-7, #hrjob-contract .col-md-7, #hrjob-contract .col-lg-7, #hrjob-contract .col-xs-8, #hrjob-contract .col-sm-8, #hrjob-contract .col-md-8, #hrjob-contract .col-lg-8, #hrjob-contract .col-xs-9, #hrjob-contract .col-sm-9, #hrjob-contract .col-md-9, #hrjob-contract .col-lg-9, #hrjob-contract .col-xs-10, #hrjob-contract .col-sm-10, #hrjob-contract .col-md-10, #hrjob-contract .col-lg-10, #hrjob-contract .col-xs-11, #hrjob-contract .col-sm-11, #hrjob-contract .col-md-11, #hrjob-contract .col-lg-11, #hrjob-contract .col-xs-12, #hrjob-contract .col-sm-12, #hrjob-contract .col-md-12, #hrjob-contract .col-lg-12 { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-1, #hrjob-contract .col-xs-2, #hrjob-contract .col-xs-3, #hrjob-contract .col-xs-4, #hrjob-contract .col-xs-5, #hrjob-contract .col-xs-6, #hrjob-contract .col-xs-7, #hrjob-contract .col-xs-8, #hrjob-contract .col-xs-9, #hrjob-contract .col-xs-10, #hrjob-contract .col-xs-11, #hrjob-contract .col-xs-12 { float: left; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-1 { width: 8.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-2 { width: 16.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-3 { width: 25%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-4 { width: 33.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-5 { width: 41.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-6 { width: 50%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-7 { width: 58.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-8 { width: 66.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-9 { width: 75%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-10 { width: 83.33333333%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-11 { width: 91.66666667%; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-12 { width: 100%; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-0 { right: auto; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-1 { right: 8.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-2 { right: 16.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-3 { right: 25%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-4 { right: 33.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-5 { right: 41.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-6 { right: 50%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-7 { right: 58.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-8 { right: 66.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-9 { right: 75%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-10 { right: 83.33333333%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-11 { right: 91.66666667%; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-pull-12 { right: 100%; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-0 { left: auto; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-1 { left: 8.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-2 { left: 16.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-3 { left: 25%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-4 { left: 33.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-5 { left: 41.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-6 { left: 50%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-7 { left: 58.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-8 { left: 66.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-9 { left: 75%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-10 { left: 83.33333333%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-11 { left: 91.66666667%; } -/* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-push-12 { left: 100%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-0 { margin-left: 0%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-1 { margin-left: 8.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-2 { margin-left: 16.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-3 { margin-left: 25%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-4 { margin-left: 33.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-5 { margin-left: 41.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-6 { margin-left: 50%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-7 { margin-left: 58.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-8 { margin-left: 66.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-9 { margin-left: 75%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-10 { margin-left: 83.33333333%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-11 { margin-left: 91.66666667%; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-xs-offset-12 { margin-left: 100%; } @media (min-width: 768px) { - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-1, #hrjob-contract .col-sm-2, #hrjob-contract .col-sm-3, #hrjob-contract .col-sm-4, #hrjob-contract .col-sm-5, #hrjob-contract .col-sm-6, #hrjob-contract .col-sm-7, #hrjob-contract .col-sm-8, #hrjob-contract .col-sm-9, #hrjob-contract .col-sm-10, #hrjob-contract .col-sm-11, #hrjob-contract .col-sm-12 { float: left; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-1 { width: 8.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-2 { width: 16.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-3 { width: 25%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-4 { width: 33.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-5 { width: 41.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-6 { width: 50%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-7 { width: 58.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-8 { width: 66.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-9 { width: 75%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-10 { width: 83.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-11 { width: 91.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-12 { width: 100%; } - /* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-0 { right: auto; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-1 { right: 8.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-2 { right: 16.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-3 { right: 25%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-4 { right: 33.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-5 { right: 41.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-6 { right: 50%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-7 { right: 58.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-8 { right: 66.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-9 { right: 75%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-10 { right: 83.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-11 { right: 91.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-pull-12 { right: 100%; } - /* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-0 { left: auto; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-1 { left: 8.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-2 { left: 16.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-3 { left: 25%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-4 { left: 33.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-5 { left: 41.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-6 { left: 50%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-7 { left: 58.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-8 { left: 66.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-9 { left: 75%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-10 { left: 83.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-11 { left: 91.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-push-12 { left: 100%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-0 { margin-left: 0%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-1 { margin-left: 8.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-2 { margin-left: 16.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-3 { margin-left: 25%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-4 { margin-left: 33.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-5 { margin-left: 41.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-6 { margin-left: 50%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-7 { margin-left: 58.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-8 { margin-left: 66.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-9 { margin-left: 75%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-10 { margin-left: 83.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-11 { margin-left: 91.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-sm-offset-12 { margin-left: 100%; } } @media (min-width: 992px) { - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-1, #hrjob-contract .col-md-2, #hrjob-contract .col-md-3, #hrjob-contract .col-md-4, #hrjob-contract .col-md-5, #hrjob-contract .col-md-6, #hrjob-contract .col-md-7, #hrjob-contract .col-md-8, #hrjob-contract .col-md-9, #hrjob-contract .col-md-10, #hrjob-contract .col-md-11, #hrjob-contract .col-md-12 { float: left; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-1 { width: 8.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-2 { width: 16.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-3 { width: 25%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-4 { width: 33.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-5 { width: 41.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-6 { width: 50%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-7 { width: 58.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-8 { width: 66.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-9 { width: 75%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-10 { width: 83.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-11 { width: 91.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-12 { width: 100%; } - /* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-0 { right: auto; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-1 { right: 8.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-2 { right: 16.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-3 { right: 25%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-4 { right: 33.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-5 { right: 41.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-6 { right: 50%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-7 { right: 58.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-8 { right: 66.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-9 { right: 75%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-10 { right: 83.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-11 { right: 91.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-pull-12 { right: 100%; } - /* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-0 { left: auto; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-1 { left: 8.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-2 { left: 16.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-3 { left: 25%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-4 { left: 33.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-5 { left: 41.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-6 { left: 50%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-7 { left: 58.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-8 { left: 66.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-9 { left: 75%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-10 { left: 83.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-11 { left: 91.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-push-12 { left: 100%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-0 { margin-left: 0%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-1 { margin-left: 8.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-2 { margin-left: 16.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-3 { margin-left: 25%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-4 { margin-left: 33.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-5 { margin-left: 41.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-6 { margin-left: 50%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-7 { margin-left: 58.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-8 { margin-left: 66.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-9 { margin-left: 75%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-10 { margin-left: 83.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-11 { margin-left: 91.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-md-offset-12 { margin-left: 100%; } } @media (min-width: 1200px) { - /* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-1, #hrjob-contract .col-lg-2, #hrjob-contract .col-lg-3, #hrjob-contract .col-lg-4, #hrjob-contract .col-lg-5, #hrjob-contract .col-lg-6, #hrjob-contract .col-lg-7, #hrjob-contract .col-lg-8, #hrjob-contract .col-lg-9, #hrjob-contract .col-lg-10, #hrjob-contract .col-lg-11, #hrjob-contract .col-lg-12 { float: left; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-1 { width: 8.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-2 { width: 16.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-3 { width: 25%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-4 { width: 33.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-5 { width: 41.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-6 { width: 50%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-7 { width: 58.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-8 { width: 66.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-9 { width: 75%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-10 { width: 83.33333333%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-11 { width: 91.66666667%; } - /* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-12 { width: 100%; } - /* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-0 { right: auto; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-1 { right: 8.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-2 { right: 16.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-3 { right: 25%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-4 { right: 33.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-5 { right: 41.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-6 { right: 50%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-7 { right: 58.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-8 { right: 66.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-9 { right: 75%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-10 { right: 83.33333333%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-11 { right: 91.66666667%; } - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-pull-12 { right: 100%; } - /* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-0 { left: auto; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-1 { left: 8.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-2 { left: 16.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-3 { left: 25%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-4 { left: 33.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-5 { left: 41.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-6 { left: 50%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-7 { left: 58.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-8 { left: 66.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-9 { left: 75%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-10 { left: 83.33333333%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-11 { left: 91.66666667%; } - /* line 40, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-push-12 { left: 100%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-0 { margin-left: 0%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-1 { margin-left: 8.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-2 { margin-left: 16.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-3 { margin-left: 25%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-4 { margin-left: 33.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-5 { margin-left: 41.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-6 { margin-left: 50%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-7 { margin-left: 58.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-8 { margin-left: 66.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-9 { margin-left: 75%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-10 { margin-left: 83.33333333%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-11 { margin-left: 91.66666667%; } - /* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_grid-framework.scss */ #hrjob-contract .col-lg-offset-12 { margin-left: 100%; } } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract table { background-color: #FFFFFF; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract caption { padding-top: 11px 8px 10px; padding-bottom: 11px 8px 10px; color: #9494A5; text-align: left; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract th { text-align: left; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table { width: 100%; max-width: 100%; margin-bottom: 18px; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > thead > tr > th, #hrjob-contract .table > thead > tr > td, #hrjob-contract .table > tbody > tr > th, @@ -4987,12 +3893,10 @@ vertical-align: top; border-top: 1px solid #E8EEF0; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > thead > tr > th { vertical-align: bottom; border-bottom: 2px solid #E8EEF0; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > caption + thead > tr:first-child > th, #hrjob-contract .table > caption + thead > tr:first-child > td, #hrjob-contract .table > colgroup + thead > tr:first-child > th, @@ -5001,15 +3905,12 @@ #hrjob-contract .table > thead:first-child > tr:first-child > td { border-top: 0; } -/* line 57, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table > tbody + tbody { border-top: 2px solid #E8EEF0; } -/* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table .table { background-color: #E8EEF0; } -/* line 75, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-condensed > thead > tr > th, #hrjob-contract .table-condensed > thead > tr > td, #hrjob-contract .table-condensed > tbody > tr > th, @@ -5018,11 +3919,9 @@ #hrjob-contract .table-condensed > tfoot > tr > td { padding: 5px; } -/* line 88, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-bordered { border: 1px solid #E8EEF0; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-bordered > thead > tr > th, #hrjob-contract .table-bordered > thead > tr > td, #hrjob-contract .table-bordered > tbody > tr > th, @@ -5031,33 +3930,27 @@ #hrjob-contract .table-bordered > tfoot > tr > td { border: 1px solid #E8EEF0; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-bordered > thead > tr > th, #hrjob-contract .table-bordered > thead > tr > td { border-bottom-width: 2px; } -/* line 114, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-striped > tbody > tr:nth-of-type(odd) { background-color: #FFFFFF; } -/* line 125, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-hover > tbody > tr:hover { background-color: #f5f5f5; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract table col[class*="col-"] { position: static; float: none; display: table-column; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract table td[class*="col-"], #hrjob-contract table th[class*="col-"] { position: static; float: none; display: table-cell; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.active, #hrjob-contract .table > thead > tr > th.active, #hrjob-contract .table > thead > tr.active > td, #hrjob-contract .table > thead > tr.active > th, #hrjob-contract .table > tbody > tr > td.active, @@ -5070,12 +3963,10 @@ #hrjob-contract .table > tfoot > tr.active > th { background-color: #f5f5f5; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.active:hover, #hrjob-contract .table-hover > tbody > tr > th.active:hover, #hrjob-contract .table-hover > tbody > tr.active:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .active, #hrjob-contract .table-hover > tbody > tr.active:hover > th { background-color: #e8e8e8; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.success, #hrjob-contract .table > thead > tr > th.success, #hrjob-contract .table > thead > tr.success > td, #hrjob-contract .table > thead > tr.success > th, #hrjob-contract .table > tbody > tr > td.success, @@ -5088,12 +3979,10 @@ #hrjob-contract .table > tfoot > tr.success > th { background-color: #dff0d8; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.success:hover, #hrjob-contract .table-hover > tbody > tr > th.success:hover, #hrjob-contract .table-hover > tbody > tr.success:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .success, #hrjob-contract .table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.info, #hrjob-contract .table > thead > tr > th.info, #hrjob-contract .table > thead > tr.info > td, #hrjob-contract .table > thead > tr.info > th, #hrjob-contract .table > tbody > tr > td.info, @@ -5106,12 +3995,10 @@ #hrjob-contract .table > tfoot > tr.info > th { background-color: #d9edf7; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.info:hover, #hrjob-contract .table-hover > tbody > tr > th.info:hover, #hrjob-contract .table-hover > tbody > tr.info:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .info, #hrjob-contract .table-hover > tbody > tr.info:hover > th { background-color: #c4e3f3; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.warning, #hrjob-contract .table > thead > tr > th.warning, #hrjob-contract .table > thead > tr.warning > td, #hrjob-contract .table > thead > tr.warning > th, #hrjob-contract .table > tbody > tr > td.warning, @@ -5124,12 +4011,10 @@ #hrjob-contract .table > tfoot > tr.warning > th { background-color: #fcf8e3; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.warning:hover, #hrjob-contract .table-hover > tbody > tr > th.warning:hover, #hrjob-contract .table-hover > tbody > tr.warning:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .warning, #hrjob-contract .table-hover > tbody > tr.warning:hover > th { background-color: #faf2cc; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table > thead > tr > td.danger, #hrjob-contract .table > thead > tr > th.danger, #hrjob-contract .table > thead > tr.danger > td, #hrjob-contract .table > thead > tr.danger > th, #hrjob-contract .table > tbody > tr > td.danger, @@ -5142,18 +4027,15 @@ #hrjob-contract .table > tfoot > tr.danger > th { background-color: #f2dede; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_table-row.scss */ #hrjob-contract .table-hover > tbody > tr > td.danger:hover, #hrjob-contract .table-hover > tbody > tr > th.danger:hover, #hrjob-contract .table-hover > tbody > tr.danger:hover > td, #hrjob-contract .table-hover > tbody > tr:hover > .danger, #hrjob-contract .table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; } -/* line 171, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive { overflow-x: auto; min-height: 0.01%; } @media screen and (max-width: 767px) { - /* line 171, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive { width: 100%; margin-bottom: 13.5px; @@ -5161,11 +4043,9 @@ -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #E8EEF0; } - /* line 183, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table { margin-bottom: 0; } - /* line 191, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table > thead > tr > th, #hrjob-contract .table-responsive > .table > thead > tr > td, #hrjob-contract .table-responsive > .table > tbody > tr > th, @@ -5174,11 +4054,9 @@ #hrjob-contract .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } - /* line 200, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered { border: 0; } - /* line 208, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered > thead > tr > th:first-child, #hrjob-contract .table-responsive > .table-bordered > thead > tr > td:first-child, #hrjob-contract .table-responsive > .table-bordered > tbody > tr > th:first-child, @@ -5187,7 +4065,6 @@ #hrjob-contract .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } - /* line 212, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered > thead > tr > th:last-child, #hrjob-contract .table-responsive > .table-bordered > thead > tr > td:last-child, #hrjob-contract .table-responsive > .table-bordered > tbody > tr > th:last-child, @@ -5196,7 +4073,6 @@ #hrjob-contract .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } - /* line 225, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tables.scss */ #hrjob-contract .table-responsive > .table-bordered > tbody > tr:last-child > th, #hrjob-contract .table-responsive > .table-bordered > tbody > tr:last-child > td, #hrjob-contract .table-responsive > .table-bordered > tfoot > tr:last-child > th, @@ -5204,14 +4080,12 @@ border-bottom: 0; } } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract fieldset { padding: 0; margin: 0; border: 0; min-width: 0; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract legend { display: block; width: 100%; @@ -5223,7 +4097,6 @@ border: 0; border-bottom: 1px solid #e5e5e5; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract label, #hrjob-contract .checkbox-label, #hrjob-contract .radio-label { display: inline-block; @@ -5231,41 +4104,34 @@ margin-bottom: 5px; font-weight: bold; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="radio"], #hrjob-contract input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; line-height: normal; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="file"] { display: block; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="range"] { display: block; width: 100%; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract select[multiple], #hrjob-contract select[size] { height: auto; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="file"]:focus, #hrjob-contract input[type="radio"]:focus, #hrjob-contract input[type="checkbox"]:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -/* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract output { display: block; padding-top: 7px; @@ -5273,7 +4139,6 @@ line-height: 1.42857143; color: #4D4D69; } -/* line 114, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control { display: block; width: 100%; @@ -5292,57 +4157,46 @@ -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } -/* line 57, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -/* line 103, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss */ #hrjob-contract .form-control::-moz-placeholder { color: #9494A5; opacity: 1; } -/* line 107, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss */ #hrjob-contract .form-control:-ms-input-placeholder { color: #9494A5; } -/* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss */ #hrjob-contract .form-control::-webkit-input-placeholder { color: #9494A5; } -/* line 136, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control::-ms-expand { border: 0; background-color: transparent; } -/* line 146, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control[disabled], #hrjob-contract .form-control[readonly], fieldset[disabled] #hrjob-contract .form-control { background-color: #F3F6F7; opacity: 1; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control[disabled], fieldset[disabled] #hrjob-contract .form-control { cursor: not-allowed; } -/* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract textarea.form-control { height: auto; } -/* line 174, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="search"] { -webkit-appearance: none; } @media screen and (-webkit-min-device-pixel-ratio: 0) { - /* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="date"].form-control, #hrjob-contract input[type="time"].form-control, #hrjob-contract input[type="datetime-local"].form-control, #hrjob-contract input[type="month"].form-control { line-height: 32px; } - /* line 197, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="date"].input-sm, #hrjob-contract .input-group-sm > input[type="date"].form-control, #hrjob-contract .input-group-sm > input[type="date"].input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > input[type="date"].btn, .input-group-sm #hrjob-contract input[type="date"], @@ -5363,7 +4217,6 @@ #hrjob-contract input[type="month"] { line-height: 30px; } - /* line 202, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="date"].input-lg, #hrjob-contract .input-group-lg > input[type="date"].form-control, #hrjob-contract .input-group-lg > input[type="date"].input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > input[type="date"].btn, .input-group-lg #hrjob-contract input[type="date"], @@ -5385,11 +4238,9 @@ line-height: 45px; } } -/* line 215, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group { margin-bottom: 15px; } -/* line 224, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio, #hrjob-contract .checkbox { position: relative; @@ -5397,7 +4248,6 @@ margin-top: 10px; margin-bottom: 10px; } -/* line 231, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio label, #hrjob-contract .radio .checkbox-label, #hrjob-contract .radio .radio-label, #hrjob-contract .checkbox label, @@ -5409,7 +4259,6 @@ font-weight: normal; cursor: pointer; } -/* line 239, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio input[type="radio"], #hrjob-contract .radio-inline input[type="radio"], #hrjob-contract .checkbox input[type="checkbox"], @@ -5418,12 +4267,10 @@ margin-left: -20px; margin-top: 4px \9; } -/* line 248, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio + .radio, #hrjob-contract .checkbox + .checkbox { margin-top: -5px; } -/* line 254, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio-inline, #hrjob-contract .checkbox-inline { position: relative; @@ -5434,26 +4281,22 @@ font-weight: normal; cursor: pointer; } -/* line 264, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio-inline + .radio-inline, #hrjob-contract .checkbox-inline + .checkbox-inline { margin-top: 0; margin-left: 10px; } -/* line 276, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract input[type="radio"][disabled], #hrjob-contract input[type="radio"].disabled, fieldset[disabled] #hrjob-contract input[type="radio"], #hrjob-contract input[type="checkbox"][disabled], #hrjob-contract input[type="checkbox"].disabled, fieldset[disabled] #hrjob-contract input[type="checkbox"] { cursor: not-allowed; } -/* line 285, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio-inline.disabled, fieldset[disabled] #hrjob-contract .radio-inline, #hrjob-contract .checkbox-inline.disabled, fieldset[disabled] #hrjob-contract .checkbox-inline { cursor: not-allowed; } -/* line 295, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .radio.disabled label, #hrjob-contract .radio.disabled .checkbox-label, #hrjob-contract .radio.disabled .radio-label, fieldset[disabled] #hrjob-contract .radio label, fieldset[disabled] #hrjob-contract .radio .checkbox-label, fieldset[disabled] #hrjob-contract .radio .radio-label, @@ -5466,14 +4309,12 @@ fieldset[disabled] #hrjob-contract .checkbox .radio-label { cursor: not-allowed; } -/* line 307, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control-static { padding-top: 7px; padding-bottom: 7px; margin-bottom: 0; min-height: 31px; } -/* line 315, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control-static.input-lg, #hrjob-contract .input-group-lg > .form-control-static.form-control, #hrjob-contract .input-group-lg > .form-control-static.input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > .form-control-static.btn, #hrjob-contract .form-control-static.input-sm, #hrjob-contract .input-group-sm > .form-control-static.form-control, @@ -5482,7 +4323,6 @@ fieldset[disabled] padding-left: 0; padding-right: 0; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .input-sm, #hrjob-contract .input-group-sm > .form-control, #hrjob-contract .input-group-sm > .input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > .btn { @@ -5492,14 +4332,12 @@ fieldset[disabled] line-height: 1.5; border-radius: 2px; } -/* line 79, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract select.input-sm, #hrjob-contract .input-group-sm > select.form-control, #hrjob-contract .input-group-sm > select.input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > select.btn { height: 30px; line-height: 30px; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract textarea.input-sm, #hrjob-contract .input-group-sm > textarea.form-control, #hrjob-contract .input-group-sm > textarea.input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > textarea.btn, @@ -5509,7 +4347,6 @@ fieldset[disabled] #hrjob-contract .input-group-sm > .input-group-btn > select[multiple].btn { height: auto; } -/* line 333, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm .form-control { height: 30px; padding: 5px 10px; @@ -5517,17 +4354,14 @@ fieldset[disabled] line-height: 1.5; border-radius: 2px; } -/* line 340, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm select.form-control { height: 30px; line-height: 30px; } -/* line 344, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm textarea.form-control, #hrjob-contract .form-group-sm select[multiple].form-control { height: auto; } -/* line 348, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-sm .form-control-static { height: 30px; min-height: 30px; @@ -5535,7 +4369,6 @@ fieldset[disabled] font-size: 12px; line-height: 1.5; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .input-lg, #hrjob-contract .input-group-lg > .form-control, #hrjob-contract .input-group-lg > .input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > .btn { @@ -5545,14 +4378,12 @@ fieldset[disabled] line-height: 1.3333333; border-radius: 4px; } -/* line 79, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract select.input-lg, #hrjob-contract .input-group-lg > select.form-control, #hrjob-contract .input-group-lg > select.input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > select.btn { height: 45px; line-height: 45px; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract textarea.input-lg, #hrjob-contract .input-group-lg > textarea.form-control, #hrjob-contract .input-group-lg > textarea.input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > textarea.btn, @@ -5562,7 +4393,6 @@ fieldset[disabled] #hrjob-contract .input-group-lg > .input-group-btn > select[multiple].btn { height: auto; } -/* line 359, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg .form-control { height: 45px; padding: 10px 16px; @@ -5570,17 +4400,14 @@ fieldset[disabled] line-height: 1.3333333; border-radius: 4px; } -/* line 366, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg select.form-control { height: 45px; line-height: 45px; } -/* line 370, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg textarea.form-control, #hrjob-contract .form-group-lg select[multiple].form-control { height: auto; } -/* line 374, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-group-lg .form-control-static { height: 45px; min-height: 35px; @@ -5588,15 +4415,12 @@ fieldset[disabled] font-size: 17px; line-height: 1.3333333; } -/* line 388, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback { position: relative; } -/* line 393, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback .form-control { padding-right: 40px; } -/* line 398, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-control-feedback { position: absolute; top: 0; @@ -5609,7 +4433,6 @@ fieldset[disabled] text-align: center; pointer-events: none; } -/* line 410, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .input-lg + .form-control-feedback, #hrjob-contract .input-group-lg > .form-control + .form-control-feedback, #hrjob-contract .input-group-lg > .input-group-addon + .form-control-feedback, #hrjob-contract .input-group-lg > .input-group-btn > .btn + .form-control-feedback, @@ -5619,7 +4442,6 @@ fieldset[disabled] height: 45px; line-height: 45px; } -/* line 417, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .input-sm + .form-control-feedback, #hrjob-contract .input-group-sm > .form-control + .form-control-feedback, #hrjob-contract .input-group-sm > .input-group-addon + .form-control-feedback, #hrjob-contract .input-group-sm > .input-group-btn > .btn + .form-control-feedback, @@ -5629,7 +4451,6 @@ fieldset[disabled] height: 30px; line-height: 30px; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .help-block, #hrjob-contract .has-success .control-label, #hrjob-contract .has-success .radio, @@ -5642,29 +4463,24 @@ fieldset[disabled] #hrjob-contract .has-success.checkbox-inline .radio-label { color: #4d994d; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .form-control { border-color: #4d994d; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .form-control:focus { border-color: #3c773c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #89c389; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #89c389; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .input-group-addon { color: #4d994d; border-color: #4d994d; background-color: #dff0d8; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-success .form-control-feedback { color: #4d994d; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .help-block, #hrjob-contract .has-warning .control-label, #hrjob-contract .has-warning .radio, @@ -5677,29 +4493,24 @@ fieldset[disabled] #hrjob-contract .has-warning.checkbox-inline .radio-label { color: #bf5900; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .form-control { border-color: #bf5900; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .form-control:focus { border-color: #8c4100; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ff8b26; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ff8b26; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .input-group-addon { color: #bf5900; border-color: #bf5900; background-color: #fcf8e3; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-warning .form-control-feedback { color: #bf5900; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .help-block, #hrjob-contract .has-error .control-label, #hrjob-contract .has-error .radio, @@ -5712,39 +4523,32 @@ fieldset[disabled] #hrjob-contract .has-error.checkbox-inline .radio-label { color: #CF3458; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .form-control { border-color: #CF3458; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .form-control:focus { border-color: #a82846; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #e3869c; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #e3869c; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .input-group-addon { color: #CF3458; border-color: #CF3458; background-color: #f2dede; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_forms.scss */ #hrjob-contract .has-error .form-control-feedback { color: #CF3458; } -/* line 439, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback label ~ .form-control-feedback, #hrjob-contract .has-feedback .checkbox-label ~ .form-control-feedback, #hrjob-contract .has-feedback .radio-label ~ .form-control-feedback { top: 23px; } -/* line 442, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .has-feedback label.sr-only ~ .form-control-feedback, #hrjob-contract .has-feedback .sr-only.checkbox-label ~ .form-control-feedback, #hrjob-contract .has-feedback .sr-only.radio-label ~ .form-control-feedback { top: 0; } -/* line 453, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .help-block { display: block; margin-top: 5px; @@ -5752,43 +4556,35 @@ fieldset[disabled] color: #8b8baa; } @media (min-width: 768px) { - /* line 478, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } - /* line 485, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } - /* line 492, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .form-control-static { display: inline-block; } - /* line 496, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .input-group { display: inline-table; vertical-align: middle; } - /* line 500, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .input-group .input-group-addon, #hrjob-contract .form-inline .input-group .input-group-btn, #hrjob-contract .form-inline .input-group .form-control { width: auto; } - /* line 508, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .input-group > .form-control { width: 100%; } - /* line 512, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .control-label { margin-bottom: 0; vertical-align: middle; } - /* line 519, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .radio, #hrjob-contract .form-inline .checkbox { display: inline-block; @@ -5796,7 +4592,6 @@ fieldset[disabled] margin-bottom: 0; vertical-align: middle; } - /* line 526, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .radio label, #hrjob-contract .form-inline .radio .checkbox-label, #hrjob-contract .form-inline .radio .radio-label, #hrjob-contract .form-inline .checkbox label, @@ -5804,18 +4599,15 @@ fieldset[disabled] #hrjob-contract .form-inline .checkbox .radio-label { padding-left: 0; } - /* line 530, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .radio input[type="radio"], #hrjob-contract .form-inline .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } - /* line 537, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-inline .has-feedback .form-control-feedback { top: 0; } } -/* line 559, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .radio, #hrjob-contract .form-horizontal .checkbox, #hrjob-contract .form-horizontal .radio-inline, @@ -5824,52 +4616,43 @@ fieldset[disabled] margin-bottom: 0; padding-top: 7px; } -/* line 569, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .radio, #hrjob-contract .form-horizontal .checkbox { min-height: 25px; } -/* line 575, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .form-group { margin-left: -15px; margin-right: -15px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .form-horizontal .form-group:before, #hrjob-contract .form-horizontal .form-group:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .form-horizontal .form-group:after { clear: both; } @media (min-width: 768px) { - /* line 582, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .control-label { text-align: right; margin-bottom: 0; padding-top: 7px; } } -/* line 593, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback .form-control-feedback { right: 15px; } @media (min-width: 768px) { - /* line 603, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .form-group-lg .control-label { padding-top: 11px; font-size: 17px; } } @media (min-width: 768px) { - /* line 611, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .form-horizontal .form-group-sm .control-label { padding-top: 6px; font-size: 12px; } } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn { display: inline-block; margin-bottom: 0; @@ -5890,24 +4673,20 @@ fieldset[disabled] -ms-user-select: none; user-select: none; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn:focus, #hrjob-contract .btn.focus, #hrjob-contract .btn:active:focus, #hrjob-contract .btn:active.focus, #hrjob-contract .btn.active:focus, #hrjob-contract .btn.active.focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn:hover, #hrjob-contract .btn:focus, #hrjob-contract .btn.focus { color: #333; text-decoration: none; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn:active, #hrjob-contract .btn.active { outline: 0; background-image: none; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn.disabled, #hrjob-contract .btn[disabled], fieldset[disabled] #hrjob-contract .btn { cursor: not-allowed; opacity: 0.65; @@ -5915,365 +4694,298 @@ fieldset[disabled] -webkit-box-shadow: none; box-shadow: none; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract a.btn.disabled, fieldset[disabled] #hrjob-contract a.btn { pointer-events: none; } -/* line 68, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-default { color: #333; background-color: #fff; border-color: #ccc; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:focus, #hrjob-contract .btn-default.focus { color: #333; background-color: #e6e6e6; border-color: #8c8c8c; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:hover { color: #333; background-color: #e6e6e6; border-color: #adadad; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:active, #hrjob-contract .btn-default.active, .open > #hrjob-contract .btn-default.dropdown-toggle { color: #333; background-color: #e6e6e6; border-color: #adadad; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:active:hover, #hrjob-contract .btn-default:active:focus, #hrjob-contract .btn-default:active.focus, #hrjob-contract .btn-default.active:hover, #hrjob-contract .btn-default.active:focus, #hrjob-contract .btn-default.active.focus, .open > #hrjob-contract .btn-default.dropdown-toggle:hover, .open > #hrjob-contract .btn-default.dropdown-toggle:focus, .open > #hrjob-contract .btn-default.dropdown-toggle.focus { color: #333; background-color: #d4d4d4; border-color: #8c8c8c; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default:active, #hrjob-contract .btn-default.active, .open > #hrjob-contract .btn-default.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default.disabled:hover, #hrjob-contract .btn-default.disabled:focus, #hrjob-contract .btn-default.disabled.focus, #hrjob-contract .btn-default[disabled]:hover, #hrjob-contract .btn-default[disabled]:focus, #hrjob-contract .btn-default[disabled].focus, fieldset[disabled] #hrjob-contract .btn-default:hover, fieldset[disabled] #hrjob-contract .btn-default:focus, fieldset[disabled] #hrjob-contract .btn-default.focus { background-color: #fff; border-color: #ccc; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-default .badge { color: #fff; background-color: #333; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-primary { color: #fff; background-color: #0071BD; border-color: #0062a4; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:focus, #hrjob-contract .btn-primary.focus { color: #fff; background-color: #00538a; border-color: #001624; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:hover { color: #fff; background-color: #00538a; border-color: #003d66; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:active, #hrjob-contract .btn-primary.active, .open > #hrjob-contract .btn-primary.dropdown-toggle { color: #fff; background-color: #00538a; border-color: #003d66; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:active:hover, #hrjob-contract .btn-primary:active:focus, #hrjob-contract .btn-primary:active.focus, #hrjob-contract .btn-primary.active:hover, #hrjob-contract .btn-primary.active:focus, #hrjob-contract .btn-primary.active.focus, .open > #hrjob-contract .btn-primary.dropdown-toggle:hover, .open > #hrjob-contract .btn-primary.dropdown-toggle:focus, .open > #hrjob-contract .btn-primary.dropdown-toggle.focus { color: #fff; background-color: #003d66; border-color: #001624; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary:active, #hrjob-contract .btn-primary.active, .open > #hrjob-contract .btn-primary.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary.disabled:hover, #hrjob-contract .btn-primary.disabled:focus, #hrjob-contract .btn-primary.disabled.focus, #hrjob-contract .btn-primary[disabled]:hover, #hrjob-contract .btn-primary[disabled]:focus, #hrjob-contract .btn-primary[disabled].focus, fieldset[disabled] #hrjob-contract .btn-primary:hover, fieldset[disabled] #hrjob-contract .btn-primary:focus, fieldset[disabled] #hrjob-contract .btn-primary.focus { background-color: #0071BD; border-color: #0062a4; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-primary .badge { color: #0071BD; background-color: #fff; } -/* line 75, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-success { color: #fff; background-color: #44CB7E; border-color: #35c071; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:focus, #hrjob-contract .btn-success.focus { color: #fff; background-color: #30ac65; border-color: #1a5c36; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:hover { color: #fff; background-color: #30ac65; border-color: #289055; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:active, #hrjob-contract .btn-success.active, .open > #hrjob-contract .btn-success.dropdown-toggle { color: #fff; background-color: #30ac65; border-color: #289055; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:active:hover, #hrjob-contract .btn-success:active:focus, #hrjob-contract .btn-success:active.focus, #hrjob-contract .btn-success.active:hover, #hrjob-contract .btn-success.active:focus, #hrjob-contract .btn-success.active.focus, .open > #hrjob-contract .btn-success.dropdown-toggle:hover, .open > #hrjob-contract .btn-success.dropdown-toggle:focus, .open > #hrjob-contract .btn-success.dropdown-toggle.focus { color: #fff; background-color: #289055; border-color: #1a5c36; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success:active, #hrjob-contract .btn-success.active, .open > #hrjob-contract .btn-success.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success.disabled:hover, #hrjob-contract .btn-success.disabled:focus, #hrjob-contract .btn-success.disabled.focus, #hrjob-contract .btn-success[disabled]:hover, #hrjob-contract .btn-success[disabled]:focus, #hrjob-contract .btn-success[disabled].focus, fieldset[disabled] #hrjob-contract .btn-success:hover, fieldset[disabled] #hrjob-contract .btn-success:focus, fieldset[disabled] #hrjob-contract .btn-success.focus { background-color: #44CB7E; border-color: #35c071; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-success .badge { color: #44CB7E; background-color: #fff; } -/* line 79, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:focus, #hrjob-contract .btn-info.focus { color: #fff; background-color: #31b0d5; border-color: #1b6d85; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #269abc; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:active, #hrjob-contract .btn-info.active, .open > #hrjob-contract .btn-info.dropdown-toggle { color: #fff; background-color: #31b0d5; border-color: #269abc; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:active:hover, #hrjob-contract .btn-info:active:focus, #hrjob-contract .btn-info:active.focus, #hrjob-contract .btn-info.active:hover, #hrjob-contract .btn-info.active:focus, #hrjob-contract .btn-info.active.focus, .open > #hrjob-contract .btn-info.dropdown-toggle:hover, .open > #hrjob-contract .btn-info.dropdown-toggle:focus, .open > #hrjob-contract .btn-info.dropdown-toggle.focus { color: #fff; background-color: #269abc; border-color: #1b6d85; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info:active, #hrjob-contract .btn-info.active, .open > #hrjob-contract .btn-info.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info.disabled:hover, #hrjob-contract .btn-info.disabled:focus, #hrjob-contract .btn-info.disabled.focus, #hrjob-contract .btn-info[disabled]:hover, #hrjob-contract .btn-info[disabled]:focus, #hrjob-contract .btn-info[disabled].focus, fieldset[disabled] #hrjob-contract .btn-info:hover, fieldset[disabled] #hrjob-contract .btn-info:focus, fieldset[disabled] #hrjob-contract .btn-info.focus { background-color: #5bc0de; border-color: #46b8da; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-info .badge { color: #5bc0de; background-color: #fff; } -/* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-warning { color: #fff; background-color: #E6AB5E; border-color: #e39f48; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:focus, #hrjob-contract .btn-warning.focus { color: #fff; background-color: #df9432; border-color: #945e17; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:hover { color: #fff; background-color: #df9432; border-color: #cd8220; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:active, #hrjob-contract .btn-warning.active, .open > #hrjob-contract .btn-warning.dropdown-toggle { color: #fff; background-color: #df9432; border-color: #cd8220; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:active:hover, #hrjob-contract .btn-warning:active:focus, #hrjob-contract .btn-warning:active.focus, #hrjob-contract .btn-warning.active:hover, #hrjob-contract .btn-warning.active:focus, #hrjob-contract .btn-warning.active.focus, .open > #hrjob-contract .btn-warning.dropdown-toggle:hover, .open > #hrjob-contract .btn-warning.dropdown-toggle:focus, .open > #hrjob-contract .btn-warning.dropdown-toggle.focus { color: #fff; background-color: #cd8220; border-color: #945e17; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning:active, #hrjob-contract .btn-warning.active, .open > #hrjob-contract .btn-warning.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning.disabled:hover, #hrjob-contract .btn-warning.disabled:focus, #hrjob-contract .btn-warning.disabled.focus, #hrjob-contract .btn-warning[disabled]:hover, #hrjob-contract .btn-warning[disabled]:focus, #hrjob-contract .btn-warning[disabled].focus, fieldset[disabled] #hrjob-contract .btn-warning:hover, fieldset[disabled] #hrjob-contract .btn-warning:focus, fieldset[disabled] #hrjob-contract .btn-warning.focus { background-color: #E6AB5E; border-color: #e39f48; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-warning .badge { color: #E6AB5E; background-color: #fff; } -/* line 87, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-danger { color: #fff; background-color: #CF3458; border-color: #bd2d4e; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:focus, #hrjob-contract .btn-danger.focus { color: #fff; background-color: #a82846; border-color: #561423; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:hover { color: #fff; background-color: #a82846; border-color: #8b213a; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:active, #hrjob-contract .btn-danger.active, .open > #hrjob-contract .btn-danger.dropdown-toggle { color: #fff; background-color: #a82846; border-color: #8b213a; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:active:hover, #hrjob-contract .btn-danger:active:focus, #hrjob-contract .btn-danger:active.focus, #hrjob-contract .btn-danger.active:hover, #hrjob-contract .btn-danger.active:focus, #hrjob-contract .btn-danger.active.focus, .open > #hrjob-contract .btn-danger.dropdown-toggle:hover, .open > #hrjob-contract .btn-danger.dropdown-toggle:focus, .open > #hrjob-contract .btn-danger.dropdown-toggle.focus { color: #fff; background-color: #8b213a; border-color: #561423; } -/* line 37, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger:active, #hrjob-contract .btn-danger.active, .open > #hrjob-contract .btn-danger.dropdown-toggle { background-image: none; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger.disabled:hover, #hrjob-contract .btn-danger.disabled:focus, #hrjob-contract .btn-danger.disabled.focus, #hrjob-contract .btn-danger[disabled]:hover, #hrjob-contract .btn-danger[disabled]:focus, #hrjob-contract .btn-danger[disabled].focus, fieldset[disabled] #hrjob-contract .btn-danger:hover, fieldset[disabled] #hrjob-contract .btn-danger:focus, fieldset[disabled] #hrjob-contract .btn-danger.focus { background-color: #CF3458; border-color: #bd2d4e; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_buttons.scss */ #hrjob-contract .btn-danger .badge { color: #CF3458; background-color: #fff; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link { color: #0071BD; font-weight: normal; border-radius: 0; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link, #hrjob-contract .btn-link:active, #hrjob-contract .btn-link.active, #hrjob-contract .btn-link[disabled], fieldset[disabled] #hrjob-contract .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } -/* line 109, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link, #hrjob-contract .btn-link:hover, #hrjob-contract .btn-link:focus, #hrjob-contract .btn-link:active { border-color: transparent; } -/* line 115, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link:hover, #hrjob-contract .btn-link:focus { color: #005c99; text-decoration: none; background-color: transparent; } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-link[disabled]:hover, #hrjob-contract .btn-link[disabled]:focus, fieldset[disabled] #hrjob-contract .btn-link:hover, fieldset[disabled] #hrjob-contract .btn-link:focus { color: #E8EEF0; text-decoration: none; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-lg, #hrjob-contract .btn-group-lg > .btn { padding: 10px 16px; font-size: 17px; line-height: 1.3333333; border-radius: 4px; } -/* line 139, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-sm, #hrjob-contract .btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 2px; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-xs, #hrjob-contract .btn-group-xs > .btn { padding: 3px 8px; font-size: 12px; line-height: 1.5; border-radius: 2px; } -/* line 151, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-block { display: block; width: 100%; } -/* line 157, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract .btn-block + .btn-block { margin-top: 5px; } -/* line 165, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_buttons.scss */ #hrjob-contract input[type="submit"].btn-block, #hrjob-contract input[type="reset"].btn-block, #hrjob-contract input[type="button"].btn-block { width: 100%; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; -o-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .fade.in { opacity: 1; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .collapse { display: none; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .collapse.in { display: block; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract tr.collapse.in { display: table-row; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract tbody.collapse.in { display: table-row-group; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_component-animations.scss */ #hrjob-contract .collapsing { position: relative; height: 0; @@ -6285,7 +4997,6 @@ fieldset[disabled] -webkit-transition-timing-function: ease; transition-timing-function: ease; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .caret { display: inline-block; width: 0; @@ -6297,16 +5008,13 @@ fieldset[disabled] border-right: 4px solid transparent; border-left: 4px solid transparent; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropup, #hrjob-contract .dropdown { position: relative; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-toggle:focus { outline: 0; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu { position: absolute; top: 100%; @@ -6328,19 +5036,16 @@ fieldset[disabled] box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); background-clip: padding-box; } -/* line 54, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu.pull-right { right: 0; left: auto; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu .divider { height: 1px; margin: 8px 0; overflow: hidden; background-color: #e5e5e5; } -/* line 65, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > li > a { display: block; padding: 3px 20px; @@ -6350,24 +5055,20 @@ fieldset[disabled] color: #4D4D69; white-space: nowrap; } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > li > a:hover, #hrjob-contract .dropdown-menu > li > a:focus { text-decoration: none; color: #42425a; background-color: #f5f5f5; } -/* line 88, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > .active > a, #hrjob-contract .dropdown-menu > .active > a:hover, #hrjob-contract .dropdown-menu > .active > a:focus { color: #fff; text-decoration: none; outline: 0; background-color: #0071BD; } -/* line 103, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > .disabled > a, #hrjob-contract .dropdown-menu > .disabled > a:hover, #hrjob-contract .dropdown-menu > .disabled > a:focus { color: #E8EEF0; } -/* line 110, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu > .disabled > a:hover, #hrjob-contract .dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; @@ -6375,25 +5076,20 @@ fieldset[disabled] filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); cursor: not-allowed; } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .open > .dropdown-menu { display: block; } -/* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .open > a { outline: 0; } -/* line 137, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu-right { left: auto; right: 0; } -/* line 147, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-menu-left { left: 0; right: auto; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-header { display: block; padding: 3px 20px; @@ -6402,7 +5098,6 @@ fieldset[disabled] color: #E8EEF0; white-space: nowrap; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropdown-backdrop { position: fixed; left: 0; @@ -6411,12 +5106,10 @@ fieldset[disabled] top: 0; z-index: 990; } -/* line 173, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .pull-right > .dropdown-menu { right: 0; left: auto; } -/* line 186, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropup .caret, #hrjob-contract .navbar-fixed-bottom .dropdown .caret { border-top: 0; @@ -6424,7 +5117,6 @@ fieldset[disabled] border-bottom: 4px solid \9; content: ""; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .dropup .dropdown-menu, #hrjob-contract .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; @@ -6432,31 +5124,26 @@ fieldset[disabled] margin-bottom: 2px; } @media (min-width: 768px) { - /* line 207, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .navbar-right .dropdown-menu { right: 0; left: auto; } - /* line 212, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_dropdowns.scss */ #hrjob-contract .navbar-right .dropdown-menu-left { left: 0; right: auto; } } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group, #hrjob-contract .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn, #hrjob-contract .btn-group-vertical > .btn { position: relative; float: left; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:hover, #hrjob-contract .btn-group > .btn:focus, #hrjob-contract .btn-group > .btn:active, #hrjob-contract .btn-group > .btn.active, #hrjob-contract .btn-group-vertical > .btn:hover, #hrjob-contract .btn-group-vertical > .btn:focus, @@ -6464,115 +5151,92 @@ fieldset[disabled] #hrjob-contract .btn-group-vertical > .btn.active { z-index: 2; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group .btn + .btn, #hrjob-contract .btn-group .btn + .btn-group, #hrjob-contract .btn-group .btn-group + .btn, #hrjob-contract .btn-group .btn-group + .btn-group { margin-left: -1px; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-toolbar { margin-left: -5px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-toolbar:before, #hrjob-contract .btn-toolbar:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-toolbar:after { clear: both; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-toolbar .btn, #hrjob-contract .btn-toolbar .btn-group, #hrjob-contract .btn-toolbar .input-group { float: left; } -/* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-toolbar > .btn, #hrjob-contract .btn-toolbar > .btn-group, #hrjob-contract .btn-toolbar > .input-group { margin-left: 5px; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } -/* line 56, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:first-child { margin-left: 0; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-bottom-right-radius: 0; border-top-right-radius: 0; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn:last-child:not(:first-child), #hrjob-contract .btn-group > .dropdown-toggle:not(:first-child) { border-bottom-left-radius: 0; border-top-left-radius: 0; } -/* line 69, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group { float: left; } -/* line 72, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, #hrjob-contract .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-top-right-radius: 0; } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { border-bottom-left-radius: 0; border-top-left-radius: 0; } -/* line 86, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group .dropdown-toggle:active, #hrjob-contract .btn-group.open .dropdown-toggle { outline: 0; } -/* line 105, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; } -/* line 109, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group > .btn-lg + .dropdown-toggle, #hrjob-contract .btn-group-lg.btn-group > .btn + .dropdown-toggle { padding-left: 12px; padding-right: 12px; } -/* line 116, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } -/* line 120, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } -/* line 127, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn .caret { margin-left: 0; } -/* line 131, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-lg .caret, #hrjob-contract .btn-group-lg > .btn .caret { border-width: 5px 5px 0; border-bottom-width: 0; } -/* line 136, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .dropup .btn-lg .caret, #hrjob-contract .dropup .btn-group-lg > .btn .caret { border-width: 0 5px 5px; } -/* line 145, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn, #hrjob-contract .btn-group-vertical > .btn-group, #hrjob-contract .btn-group-vertical > .btn-group > .btn { @@ -6581,20 +5245,16 @@ fieldset[disabled] width: 100%; max-width: 100%; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-group-vertical > .btn-group:before, #hrjob-contract .btn-group-vertical > .btn-group:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .btn-group-vertical > .btn-group:after { clear: both; } -/* line 157, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group > .btn { float: none; } -/* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn + .btn, #hrjob-contract .btn-group-vertical > .btn + .btn-group, #hrjob-contract .btn-group-vertical > .btn-group + .btn, @@ -6602,62 +5262,51 @@ fieldset[disabled] margin-top: -1px; margin-left: 0; } -/* line 172, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } -/* line 175, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn:first-child:not(:last-child) { border-top-right-radius: 2px; border-top-left-radius: 2px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -/* line 179, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn:last-child:not(:first-child) { border-top-right-radius: 0; border-top-left-radius: 0; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; } -/* line 184, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } -/* line 188, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, #hrjob-contract .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 201, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: separate; } -/* line 206, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified > .btn, #hrjob-contract .btn-group-justified > .btn-group { float: none; display: table-cell; width: 1%; } -/* line 212, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified > .btn-group .btn { width: 100%; } -/* line 216, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract .btn-group-justified > .btn-group .dropdown-menu { left: auto; } -/* line 237, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_button-groups.scss */ #hrjob-contract [data-toggle="buttons"] > .btn input[type="radio"], #hrjob-contract [data-toggle="buttons"] > .btn input[type="checkbox"], #hrjob-contract [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], @@ -6666,19 +5315,16 @@ fieldset[disabled] clip: rect(0, 0, 0, 0); pointer-events: none; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group { position: relative; display: table; border-collapse: separate; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group[class*="col-"] { float: none; padding-left: 0; padding-right: 0; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control { position: relative; z-index: 2; @@ -6686,30 +5332,25 @@ fieldset[disabled] width: 100%; margin-bottom: 0; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control:focus { z-index: 3; } -/* line 58, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon, #hrjob-contract .input-group-btn, #hrjob-contract .input-group .form-control { display: table-cell; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon:not(:first-child):not(:last-child), #hrjob-contract .input-group-btn:not(:first-child):not(:last-child), #hrjob-contract .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } -/* line 68, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon, #hrjob-contract .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } -/* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon { padding: 6px 12px; font-size: 13px; @@ -6721,7 +5362,6 @@ fieldset[disabled] border: 1px solid #C2CFD8; border-radius: 2px; } -/* line 89, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon.input-sm, #hrjob-contract .input-group-sm > .input-group-addon, #hrjob-contract .input-group-sm > .input-group-btn > .input-group-addon.btn { @@ -6729,7 +5369,6 @@ fieldset[disabled] font-size: 12px; border-radius: 2px; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon.input-lg, #hrjob-contract .input-group-lg > .input-group-addon, #hrjob-contract .input-group-lg > .input-group-btn > .input-group-addon.btn { @@ -6737,12 +5376,10 @@ fieldset[disabled] font-size: 17px; border-radius: 4px; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon input[type="radio"], #hrjob-contract .input-group-addon input[type="checkbox"] { margin-top: 0; } -/* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control:first-child, #hrjob-contract .input-group-addon:first-child, #hrjob-contract .input-group-btn:first-child > .btn, @@ -6753,11 +5390,9 @@ fieldset[disabled] border-bottom-right-radius: 0; border-top-right-radius: 0; } -/* line 117, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon:first-child { border-right: 0; } -/* line 120, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group .form-control:last-child, #hrjob-contract .input-group-addon:last-child, #hrjob-contract .input-group-btn:last-child > .btn, @@ -6768,118 +5403,95 @@ fieldset[disabled] border-bottom-left-radius: 0; border-top-left-radius: 0; } -/* line 129, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-addon:last-child { border-left: 0; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn { position: relative; font-size: 0; white-space: nowrap; } -/* line 144, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn > .btn { position: relative; } -/* line 146, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn > .btn + .btn { margin-left: -1px; } -/* line 150, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn > .btn:hover, #hrjob-contract .input-group-btn > .btn:focus, #hrjob-contract .input-group-btn > .btn:active { z-index: 2; } -/* line 159, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn:first-child > .btn, #hrjob-contract .input-group-btn:first-child > .btn-group { margin-right: -1px; } -/* line 165, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_input-groups.scss */ #hrjob-contract .input-group-btn:last-child > .btn, #hrjob-contract .input-group-btn:last-child > .btn-group { z-index: 2; margin-left: -1px; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav { margin-bottom: 0; padding-left: 0; list-style: none; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .nav:before, #hrjob-contract .nav:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .nav:after { clear: both; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li { position: relative; display: block; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li > a { position: relative; display: block; padding: 10px 15px; } -/* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li > a:hover, #hrjob-contract .nav > li > a:focus { text-decoration: none; background-color: #F3F6F7; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li.disabled > a { color: #E8EEF0; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li.disabled > a:hover, #hrjob-contract .nav > li.disabled > a:focus { color: #E8EEF0; text-decoration: none; background-color: transparent; cursor: not-allowed; } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav .open > a, #hrjob-contract .nav .open > a:hover, #hrjob-contract .nav .open > a:focus { background-color: #F3F6F7; border-color: #0071BD; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav .nav-divider { height: 1px; margin: 8px 0; overflow: hidden; background-color: #e5e5e5; } -/* line 66, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav > li > a > img { max-width: none; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs { border-bottom: 1px solid #D3DEE2; } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li { float: left; margin-bottom: -1px; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li > a { margin-right: 2px; line-height: 1.42857143; border: 1px solid transparent; border-radius: 2px 2px 0 0; } -/* line 89, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li > a:hover { border-color: #F3F6F7 #F3F6F7 #D3DEE2; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs > li.active > a, #hrjob-contract .nav-tabs > li.active > a:hover, #hrjob-contract .nav-tabs > li.active > a:focus { color: #464354; background-color: #F3F6F7; @@ -6887,71 +5499,56 @@ fieldset[disabled] border-bottom-color: transparent; cursor: default; } -/* line 118, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li { float: left; } -/* line 122, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li > a { border-radius: 2px; } -/* line 125, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li + li { margin-left: 2px; } -/* line 131, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-pills > li.active > a, #hrjob-contract .nav-pills > li.active > a:hover, #hrjob-contract .nav-pills > li.active > a:focus { color: #fff; background-color: #0071BD; } -/* line 144, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-stacked > li { float: none; } -/* line 146, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-stacked > li + li { margin-top: 2px; margin-left: 0; } -/* line 160, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified, #hrjob-contract .nav-tabs.nav-justified { width: 100%; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li, #hrjob-contract .nav-tabs.nav-justified > li { float: none; } -/* line 165, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { text-align: center; margin-bottom: 5px; } -/* line 171, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > .dropdown .dropdown-menu { top: auto; left: auto; } @media (min-width: 768px) { - /* line 177, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li, #hrjob-contract .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } - /* line 180, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { margin-bottom: 0; } } -/* line 190, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified, #hrjob-contract .nav-tabs.nav-justified { border-bottom: 0; } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { margin-right: 0; border-radius: 2px; } -/* line 199, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > .active > a, #hrjob-contract .nav-tabs.nav-justified > .active > a, #hrjob-contract .nav-tabs-justified > .active > a:hover, #hrjob-contract .nav-tabs.nav-justified > .active > a:hover, @@ -6960,12 +5557,10 @@ fieldset[disabled] border: 1px solid #ddd; } @media (min-width: 768px) { - /* line 206, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > li > a, #hrjob-contract .nav-tabs.nav-justified > li > a { border-bottom: 1px solid #ddd; border-radius: 2px 2px 0 0; } - /* line 210, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs-justified > .active > a, #hrjob-contract .nav-tabs.nav-justified > .active > a, #hrjob-contract .nav-tabs-justified > .active > a:hover, #hrjob-contract .nav-tabs.nav-justified > .active > a:hover, @@ -6974,58 +5569,47 @@ fieldset[disabled] border-bottom-color: #E8EEF0; } } -/* line 224, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .tab-content > .tab-pane { display: none; } -/* line 227, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .tab-content > .active { display: block; } -/* line 237, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navs.scss */ #hrjob-contract .nav-tabs .dropdown-menu { margin-top: -1px; border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar { position: relative; min-height: 50px; margin-bottom: 18px; border: 1px solid transparent; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar:before, #hrjob-contract .navbar:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar:after { clear: both; } @media (min-width: 768px) { - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar { border-radius: 2px; } } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-header:before, #hrjob-contract .navbar-header:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-header:after { clear: both; } @media (min-width: 768px) { - /* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-header { float: left; } } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse { overflow-x: visible; padding-right: 15px; @@ -7034,56 +5618,46 @@ fieldset[disabled] box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-collapse:before, #hrjob-contract .navbar-collapse:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .navbar-collapse:after { clear: both; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse.in { overflow-y: auto; } @media (min-width: 768px) { - /* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse { width: auto; border-top: 0; box-shadow: none; } - /* line 68, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse.collapse { display: block !important; height: auto !important; padding-bottom: 0; overflow: visible !important; } - /* line 75, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-collapse.in { overflow-y: visible; } - /* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ .navbar-fixed-top #hrjob-contract .navbar-collapse, .navbar-static-top #hrjob-contract .navbar-collapse, .navbar-fixed-bottom #hrjob-contract .navbar-collapse { padding-left: 0; padding-right: 0; } } -/* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top .navbar-collapse, #hrjob-contract .navbar-fixed-bottom .navbar-collapse { max-height: 340px; } @media (max-device-width: 480px) and (orientation: landscape) { - /* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top .navbar-collapse, #hrjob-contract .navbar-fixed-bottom .navbar-collapse { max-height: 200px; } } -/* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .container > .navbar-header, #hrjob-contract .container > .navbar-collapse, #hrjob-contract .container-fluid > .navbar-header, @@ -7092,7 +5666,6 @@ fieldset[disabled] margin-left: -15px; } @media (min-width: 768px) { - /* line 108, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .container > .navbar-header, #hrjob-contract .container > .navbar-collapse, #hrjob-contract .container-fluid > .navbar-header, @@ -7101,18 +5674,15 @@ fieldset[disabled] margin-left: 0; } } -/* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-static-top { z-index: 1000; border-width: 0 0 1px; } @media (min-width: 768px) { - /* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-static-top { border-radius: 0; } } -/* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top, #hrjob-contract .navbar-fixed-bottom { position: fixed; @@ -7121,24 +5691,20 @@ fieldset[disabled] z-index: 1030; } @media (min-width: 768px) { - /* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top, #hrjob-contract .navbar-fixed-bottom { border-radius: 0; } } -/* line 150, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-top { top: 0; border-width: 0 0 1px; } -/* line 154, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-brand { float: left; padding: 16px 15px; @@ -7146,21 +5712,17 @@ fieldset[disabled] line-height: 18px; height: 50px; } -/* line 170, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-brand:hover, #hrjob-contract .navbar-brand:focus { text-decoration: none; } -/* line 175, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-brand > img { display: block; } @media (min-width: 768px) { - /* line 180, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ .navbar > .container #hrjob-contract .navbar-brand, .navbar > .container-fluid #hrjob-contract .navbar-brand { margin-left: -15px; } } -/* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle { position: relative; float: right; @@ -7173,39 +5735,32 @@ fieldset[disabled] border: 1px solid transparent; border-radius: 2px; } -/* line 206, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle:focus { outline: 0; } -/* line 211, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } -/* line 217, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle .icon-bar + .icon-bar { margin-top: 4px; } @media (min-width: 768px) { - /* line 193, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-toggle { display: none; } } -/* line 232, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav { margin: 8px -15px; } -/* line 235, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; line-height: 18px; } @media (max-width: 767px) { - /* line 243, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu { position: static; float: none; @@ -7215,37 +5770,30 @@ fieldset[disabled] border: 0; box-shadow: none; } - /* line 251, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu > li > a, #hrjob-contract .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } - /* line 255, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu > li > a { line-height: 18px; } - /* line 257, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav .open .dropdown-menu > li > a:hover, #hrjob-contract .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } } @media (min-width: 768px) { - /* line 232, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav { float: left; margin: 0; } - /* line 270, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li { float: left; } - /* line 272, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li > a { padding-top: 16px; padding-bottom: 16px; } } -/* line 286, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form { margin-left: -15px; margin-right: -15px; @@ -7258,43 +5806,35 @@ fieldset[disabled] margin-bottom: 9px; } @media (min-width: 768px) { - /* line 478, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } - /* line 485, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle; } - /* line 492, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .form-control-static { display: inline-block; } - /* line 496, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .input-group { display: inline-table; vertical-align: middle; } - /* line 500, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .input-group .input-group-addon, #hrjob-contract .navbar-form .input-group .input-group-btn, #hrjob-contract .navbar-form .input-group .form-control { width: auto; } - /* line 508, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .input-group > .form-control { width: 100%; } - /* line 512, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; } - /* line 519, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .radio, #hrjob-contract .navbar-form .checkbox { display: inline-block; @@ -7302,7 +5842,6 @@ fieldset[disabled] margin-bottom: 0; vertical-align: middle; } - /* line 526, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .radio label, #hrjob-contract .navbar-form .radio .checkbox-label, #hrjob-contract .navbar-form .radio .radio-label, #hrjob-contract .navbar-form .checkbox label, @@ -7310,29 +5849,24 @@ fieldset[disabled] #hrjob-contract .navbar-form .checkbox .radio-label { padding-left: 0; } - /* line 530, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .radio input[type="radio"], #hrjob-contract .navbar-form .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } - /* line 537, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_forms.scss */ #hrjob-contract .navbar-form .has-feedback .form-control-feedback { top: 0; } } @media (max-width: 767px) { - /* line 298, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form .form-group { margin-bottom: 5px; } - /* line 302, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form .form-group:last-child { margin-bottom: 0; } } @media (min-width: 768px) { - /* line 286, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-form { width: auto; border: 0; @@ -7344,13 +5878,11 @@ fieldset[disabled] box-shadow: none; } } -/* line 327, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-nav > li > .dropdown-menu { margin-top: 0; border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 332, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { margin-bottom: 0; border-top-right-radius: 2px; @@ -7358,28 +5890,23 @@ fieldset[disabled] border-bottom-right-radius: 0; border-bottom-left-radius: 0; } -/* line 343, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-btn { margin-top: 9px; margin-bottom: 9px; } -/* line 346, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-btn.btn-sm, #hrjob-contract .btn-group-sm > .navbar-btn.btn { margin-top: 10px; margin-bottom: 10px; } -/* line 349, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-btn.btn-xs, #hrjob-contract .btn-group-xs > .navbar-btn.btn { margin-top: 14px; margin-bottom: 14px; } -/* line 359, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-text { margin-top: 16px; margin-bottom: 16px; } @media (min-width: 768px) { - /* line 359, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-text { float: left; margin-left: 15px; @@ -7387,229 +5914,179 @@ fieldset[disabled] } } @media (min-width: 768px) { - /* line 379, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-left { float: left !important; } - /* line 382, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-right { float: right !important; margin-right: -15px; } - /* line 386, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-right ~ .navbar-right { margin-right: 0; } } -/* line 397, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7; } -/* line 401, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-brand { color: #777; } -/* line 403, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-brand:hover, #hrjob-contract .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } -/* line 410, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-text { color: #777; } -/* line 415, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > li > a { color: #777; } -/* line 418, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > li > a:hover, #hrjob-contract .navbar-default .navbar-nav > li > a:focus { color: #333; background-color: transparent; } -/* line 425, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > .active > a, #hrjob-contract .navbar-default .navbar-nav > .active > a:hover, #hrjob-contract .navbar-default .navbar-nav > .active > a:focus { color: #555; background-color: #e7e7e7; } -/* line 433, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > .disabled > a, #hrjob-contract .navbar-default .navbar-nav > .disabled > a:hover, #hrjob-contract .navbar-default .navbar-nav > .disabled > a:focus { color: #ccc; background-color: transparent; } -/* line 442, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-toggle { border-color: #ddd; } -/* line 444, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-toggle:hover, #hrjob-contract .navbar-default .navbar-toggle:focus { background-color: #ddd; } -/* line 448, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-toggle .icon-bar { background-color: #888; } -/* line 453, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-collapse, #hrjob-contract .navbar-default .navbar-form { border-color: #e7e7e7; } -/* line 462, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav > .open > a, #hrjob-contract .navbar-default .navbar-nav > .open > a:hover, #hrjob-contract .navbar-default .navbar-nav > .open > a:focus { background-color: #e7e7e7; color: #555; } @media (max-width: 767px) { - /* line 473, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: #777; } - /* line 475, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: #333; background-color: transparent; } - /* line 482, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .active > a, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555; background-color: #e7e7e7; } - /* line 490, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, #hrjob-contract .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #ccc; background-color: transparent; } } -/* line 506, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-link { color: #777; } -/* line 508, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .navbar-link:hover { color: #333; } -/* line 513, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .btn-link { color: #777; } -/* line 515, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .btn-link:hover, #hrjob-contract .navbar-default .btn-link:focus { color: #333; } -/* line 521, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-default .btn-link[disabled]:hover, #hrjob-contract .navbar-default .btn-link[disabled]:focus, fieldset[disabled] #hrjob-contract .navbar-default .btn-link:hover, fieldset[disabled] #hrjob-contract .navbar-default .btn-link:focus { color: #ccc; } -/* line 531, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse { background-color: #222; border-color: #090909; } -/* line 535, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-brand { color: white; } -/* line 537, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-brand:hover, #hrjob-contract .navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent; } -/* line 544, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-text { color: white; } -/* line 549, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > li > a { color: white; } -/* line 552, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > li > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > li > a:focus { color: #fff; background-color: transparent; } -/* line 559, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > .active > a, #hrjob-contract .navbar-inverse .navbar-nav > .active > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > .active > a:focus { color: #fff; background-color: #090909; } -/* line 567, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > .disabled > a, #hrjob-contract .navbar-inverse .navbar-nav > .disabled > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > .disabled > a:focus { color: #444; background-color: transparent; } -/* line 577, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-toggle { border-color: #333; } -/* line 579, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-toggle:hover, #hrjob-contract .navbar-inverse .navbar-toggle:focus { background-color: #333; } -/* line 583, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff; } -/* line 588, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-collapse, #hrjob-contract .navbar-inverse .navbar-form { border-color: #101010; } -/* line 596, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav > .open > a, #hrjob-contract .navbar-inverse .navbar-nav > .open > a:hover, #hrjob-contract .navbar-inverse .navbar-nav > .open > a:focus { background-color: #090909; color: #fff; } @media (max-width: 767px) { - /* line 607, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: #090909; } - /* line 610, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #090909; } - /* line 613, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: white; } - /* line 615, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #fff; background-color: transparent; } - /* line 622, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #fff; background-color: #090909; } - /* line 630, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, #hrjob-contract .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #444; background-color: transparent; } } -/* line 641, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-link { color: white; } -/* line 643, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .navbar-link:hover { color: #fff; } -/* line 648, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .btn-link { color: white; } -/* line 650, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .btn-link:hover, #hrjob-contract .navbar-inverse .btn-link:focus { color: #fff; } -/* line 656, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_navbar.scss */ #hrjob-contract .navbar-inverse .btn-link[disabled]:hover, #hrjob-contract .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] #hrjob-contract .navbar-inverse .btn-link:hover, fieldset[disabled] #hrjob-contract .navbar-inverse .btn-link:focus { color: #444; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb { padding: 8px 15px; margin-bottom: 18px; @@ -7617,32 +6094,26 @@ fieldset[disabled] background-color: #f5f5f5; border-radius: 2px; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb > li { display: inline-block; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb > li + li:before { content: "/ "; padding: 0 5px; color: #ccc; } -/* line 25, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_breadcrumbs.scss */ #hrjob-contract .breadcrumb > .active { color: #E8EEF0; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination { display: inline-block; padding-left: 0; margin: 18px 0; border-radius: 2px; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li { display: inline; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li > a, #hrjob-contract .pagination > li > span { position: relative; @@ -7655,20 +6126,17 @@ fieldset[disabled] border: 1px solid #ddd; margin-left: -1px; } -/* line 25, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li:first-child > a, #hrjob-contract .pagination > li:first-child > span { margin-left: 0; border-bottom-left-radius: 2px; border-top-left-radius: 2px; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li:last-child > a, #hrjob-contract .pagination > li:last-child > span { border-bottom-right-radius: 2px; border-top-right-radius: 2px; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > li > a:hover, #hrjob-contract .pagination > li > a:focus, #hrjob-contract .pagination > li > span:hover, #hrjob-contract .pagination > li > span:focus { @@ -7677,7 +6145,6 @@ fieldset[disabled] background-color: #F3F6F7; border-color: #ddd; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > .active > a, #hrjob-contract .pagination > .active > a:hover, #hrjob-contract .pagination > .active > a:focus, #hrjob-contract .pagination > .active > span, #hrjob-contract .pagination > .active > span:hover, @@ -7688,7 +6155,6 @@ fieldset[disabled] border-color: #0071BD; cursor: default; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pagination.scss */ #hrjob-contract .pagination > .disabled > span, #hrjob-contract .pagination > .disabled > span:hover, #hrjob-contract .pagination > .disabled > span:focus, @@ -7700,65 +6166,54 @@ fieldset[disabled] border-color: #ddd; cursor: not-allowed; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-lg > li > a, #hrjob-contract .pagination-lg > li > span { padding: 10px 16px; font-size: 17px; line-height: 1.3333333; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-lg > li:first-child > a, #hrjob-contract .pagination-lg > li:first-child > span { border-bottom-left-radius: 4px; border-top-left-radius: 4px; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-lg > li:last-child > a, #hrjob-contract .pagination-lg > li:last-child > span { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-sm > li > a, #hrjob-contract .pagination-sm > li > span { padding: 5px 10px; font-size: 12px; line-height: 1.5; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-sm > li:first-child > a, #hrjob-contract .pagination-sm > li:first-child > span { border-bottom-left-radius: 2px; border-top-left-radius: 2px; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_pagination.scss */ #hrjob-contract .pagination-sm > li:last-child > a, #hrjob-contract .pagination-sm > li:last-child > span { border-bottom-right-radius: 2px; border-top-right-radius: 2px; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager { padding-left: 0; margin: 18px 0; list-style: none; text-align: center; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .pager:before, #hrjob-contract .pager:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .pager:after { clear: both; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager li { display: inline; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager li > a, #hrjob-contract .pager li > span { display: inline-block; @@ -7767,23 +6222,19 @@ fieldset[disabled] border: 1px solid #ddd; border-radius: 15px; } -/* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager li > a:hover, #hrjob-contract .pager li > a:focus { text-decoration: none; background-color: #F3F6F7; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager .next > a, #hrjob-contract .pager .next > span { float: right; } -/* line 38, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager .previous > a, #hrjob-contract .pager .previous > span { float: left; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_pager.scss */ #hrjob-contract .pager .disabled > a, #hrjob-contract .pager .disabled > a:hover, #hrjob-contract .pager .disabled > a:focus, @@ -7792,7 +6243,6 @@ fieldset[disabled] background-color: #fff; cursor: not-allowed; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label { display: inline; padding: .2em .6em .3em; @@ -7805,70 +6255,54 @@ fieldset[disabled] vertical-align: baseline; border-radius: .25em; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label:empty { display: none; } -/* line 25, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ .btn #hrjob-contract .label { position: relative; top: -1px; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract a.label:hover, #hrjob-contract a.label:focus { color: #fff; text-decoration: none; cursor: pointer; } -/* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-default { background-color: #E8EEF0; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-default[href]:hover, #hrjob-contract .label-default[href]:focus { background-color: #c9d7dc; } -/* line 48, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-primary { background-color: #0071BD; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-primary[href]:hover, #hrjob-contract .label-primary[href]:focus { background-color: #00538a; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-success { background-color: #44CB7E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-success[href]:hover, #hrjob-contract .label-success[href]:focus { background-color: #30ac65; } -/* line 56, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-info { background-color: #5bc0de; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-info[href]:hover, #hrjob-contract .label-info[href]:focus { background-color: #31b0d5; } -/* line 60, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-warning { background-color: #E6AB5E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-warning[href]:hover, #hrjob-contract .label-warning[href]:focus { background-color: #df9432; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_labels.scss */ #hrjob-contract .label-danger { background-color: #CF3458; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_labels.scss */ #hrjob-contract .label-danger[href]:hover, #hrjob-contract .label-danger[href]:focus { background-color: #a82846; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ #hrjob-contract .badge { display: inline-block; min-width: 10px; @@ -7883,44 +6317,35 @@ fieldset[disabled] background-color: #E8EEF0; border-radius: 10px; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ #hrjob-contract .badge:empty { display: none; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .btn #hrjob-contract .badge { position: relative; top: -1px; } -/* line 32, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .btn-xs #hrjob-contract .badge, #hrjob-contract .btn-group-xs > .btn #hrjob-contract .badge, .btn-group-xs > .btn #hrjob-contract .badge { top: 0; padding: 1px 5px; } -/* line 41, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .list-group-item.active > #hrjob-contract .badge, .nav-pills > .active > a > #hrjob-contract .badge { color: #0071BD; background-color: #fff; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .list-group-item > #hrjob-contract .badge { float: right; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .list-group-item > #hrjob-contract .badge + #hrjob-contract .badge { margin-right: 5px; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ .nav-pills > li > a > #hrjob-contract .badge { margin-left: 3px; } -/* line 62, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_badges.scss */ #hrjob-contract a.badge:hover, #hrjob-contract a.badge:focus { color: #fff; text-decoration: none; cursor: pointer; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron { padding-top: 30px; padding-bottom: 30px; @@ -7928,49 +6353,40 @@ fieldset[disabled] color: inherit; background-color: #F3F6F7; } -/* line 13, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron h1, #hrjob-contract .jumbotron .h1 { color: inherit; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron p { margin-bottom: 15px; font-size: 20px; font-weight: 200; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron > hr { border-top-color: #d4dfe3; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ .container #hrjob-contract .jumbotron, .container-fluid #hrjob-contract .jumbotron { border-radius: 4px; padding-left: 15px; padding-right: 15px; } -/* line 35, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron .container { max-width: 100%; } @media screen and (min-width: 768px) { - /* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron { padding-top: 48px; padding-bottom: 48px; } - /* line 43, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ .container #hrjob-contract .jumbotron, .container-fluid #hrjob-contract .jumbotron { padding-left: 60px; padding-right: 60px; } - /* line 49, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_jumbotron.scss */ #hrjob-contract .jumbotron h1, #hrjob-contract .jumbotron .h1 { font-size: 59px; } } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract .thumbnail { display: block; padding: 4px; @@ -7983,7 +6399,6 @@ fieldset[disabled] -o-transition: border 0.2s ease-in-out; transition: border 0.2s ease-in-out; } -/* line 17, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract .thumbnail > img, #hrjob-contract .thumbnail a > img { display: block; @@ -7992,48 +6407,39 @@ fieldset[disabled] margin-left: auto; margin-right: auto; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract .thumbnail .caption { padding: 9px; color: #4D4D69; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_thumbnails.scss */ #hrjob-contract a.thumbnail:hover, #hrjob-contract a.thumbnail:focus, #hrjob-contract a.thumbnail.active { border-color: #0071BD; } -/* line 9, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert { padding: 15px; margin-bottom: 18px; border: 1px solid transparent; border-radius: 2px; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert h4 { margin-top: 0; color: inherit; } -/* line 23, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert .alert-link { font-weight: 600; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert > p, #hrjob-contract .alert > ul { margin-bottom: 0; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert > p + p { margin-top: 5px; } -/* line 42, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-dismissable, #hrjob-contract .alert-dismissible { padding-right: 35px; } -/* line 47, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-dismissable .close, #hrjob-contract .alert-dismissible .close { position: relative; @@ -8041,59 +6447,47 @@ fieldset[disabled] right: -21px; color: inherit; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-success { background-color: #dff0d8; border-color: #d6e9c6; color: #4d994d; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-success hr { border-top-color: #c9e2b3; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-success .alert-link { color: #3c773c; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-info { background-color: #d9edf7; border-color: #bce8f1; color: #31708f; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-info hr { border-top-color: #a6e1ec; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-info .alert-link { color: #245269; } -/* line 67, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-warning { background-color: #fcf8e3; border-color: #faebcc; color: #bf5900; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-warning hr { border-top-color: #f7e1b5; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-warning .alert-link { color: #8c4100; } -/* line 71, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_alerts.scss */ #hrjob-contract .alert-danger { background-color: #f2dede; border-color: #ebccd1; color: #CF3458; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-danger hr { border-top-color: #e4b9c0; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_alerts.scss */ #hrjob-contract .alert-danger .alert-link { color: #a82846; } @@ -8113,7 +6507,6 @@ fieldset[disabled] background-position: 0 0; } } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress { overflow: hidden; height: 18px; @@ -8123,7 +6516,6 @@ fieldset[disabled] -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar { float: left; width: 0%; @@ -8139,7 +6531,6 @@ fieldset[disabled] -o-transition: width 0.6s ease; transition: width 0.6s ease; } -/* line 54, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-striped .progress-bar, #hrjob-contract .progress-bar-striped { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); @@ -8147,120 +6538,96 @@ fieldset[disabled] background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 40px 40px; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress.active .progress-bar, #hrjob-contract .progress-bar.active { -webkit-animation: progress-bar-stripes 2s linear infinite; -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } -/* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-success { background-color: #44CB7E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-success { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-info { background-color: #5bc0de; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-info { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-warning { background-color: #E6AB5E; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-warning { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 85, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_progress-bars.scss */ #hrjob-contract .progress-bar-danger { background-color: #CF3458; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_progress-bar.scss */ .progress-striped #hrjob-contract .progress-bar-danger { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } -/* line 1, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media { margin-top: 15px; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media:first-child { margin-top: 0; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media, #hrjob-contract .media-body { zoom: 1; overflow: hidden; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-body { width: 10000px; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-object { display: block; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-object.img-thumbnail { max-width: none; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-right, #hrjob-contract .media > .pull-right { padding-left: 10px; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-left, #hrjob-contract .media > .pull-left { padding-right: 10px; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-left, #hrjob-contract .media-right, #hrjob-contract .media-body { display: table-cell; vertical-align: top; } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-middle { vertical-align: middle; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-bottom { vertical-align: bottom; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-heading { margin-top: 0; margin-bottom: 5px; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_media.scss */ #hrjob-contract .media-list { padding-left: 0; list-style: none; } -/* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group { margin-bottom: 20px; padding-left: 0; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item { position: relative; display: block; @@ -8269,28 +6636,23 @@ fieldset[disabled] background-color: #fff; border: 1px solid #ddd; } -/* line 31, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item:first-child { border-top-right-radius: 2px; border-top-left-radius: 2px; } -/* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 2px; border-bottom-left-radius: 2px; } -/* line 46, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract a.list-group-item, #hrjob-contract button.list-group-item { color: #555; } -/* line 50, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract a.list-group-item .list-group-item-heading, #hrjob-contract button.list-group-item .list-group-item-heading { color: #333; } -/* line 55, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract a.list-group-item:hover, #hrjob-contract a.list-group-item:focus, #hrjob-contract button.list-group-item:hover, #hrjob-contract button.list-group-item:focus { @@ -8298,33 +6660,27 @@ fieldset[disabled] color: #555; background-color: #f5f5f5; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract button.list-group-item { width: 100%; text-align: left; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.disabled, #hrjob-contract .list-group-item.disabled:hover, #hrjob-contract .list-group-item.disabled:focus { background-color: #F3F6F7; color: #E8EEF0; cursor: not-allowed; } -/* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.disabled .list-group-item-heading, #hrjob-contract .list-group-item.disabled:hover .list-group-item-heading, #hrjob-contract .list-group-item.disabled:focus .list-group-item-heading { color: inherit; } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.disabled .list-group-item-text, #hrjob-contract .list-group-item.disabled:hover .list-group-item-text, #hrjob-contract .list-group-item.disabled:focus .list-group-item-text { color: #E8EEF0; } -/* line 87, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.active, #hrjob-contract .list-group-item.active:hover, #hrjob-contract .list-group-item.active:focus { z-index: 2; color: #fff; background-color: #0071BD; border-color: #0071BD; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.active .list-group-item-heading, #hrjob-contract .list-group-item.active .list-group-item-heading > small, #hrjob-contract .list-group-item.active .list-group-item-heading > .small, #hrjob-contract .list-group-item.active:hover .list-group-item-heading, @@ -8334,33 +6690,27 @@ fieldset[disabled] #hrjob-contract .list-group-item.active:focus .list-group-item-heading > .small { color: inherit; } -/* line 101, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item.active .list-group-item-text, #hrjob-contract .list-group-item.active:hover .list-group-item-text, #hrjob-contract .list-group-item.active:focus .list-group-item-text { color: #8ad0ff; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-success { color: #4d994d; background-color: #dff0d8; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success, #hrjob-contract button.list-group-item-success { color: #4d994d; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success .list-group-item-heading, #hrjob-contract button.list-group-item-success .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success:hover, #hrjob-contract a.list-group-item-success:focus, #hrjob-contract button.list-group-item-success:hover, #hrjob-contract button.list-group-item-success:focus { color: #4d994d; background-color: #d0e9c6; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-success.active, #hrjob-contract a.list-group-item-success.active:hover, #hrjob-contract a.list-group-item-success.active:focus, #hrjob-contract button.list-group-item-success.active, #hrjob-contract button.list-group-item-success.active:hover, @@ -8369,29 +6719,24 @@ fieldset[disabled] background-color: #4d994d; border-color: #4d994d; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-info { color: #31708f; background-color: #d9edf7; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info, #hrjob-contract button.list-group-item-info { color: #31708f; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info .list-group-item-heading, #hrjob-contract button.list-group-item-info .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info:hover, #hrjob-contract a.list-group-item-info:focus, #hrjob-contract button.list-group-item-info:hover, #hrjob-contract button.list-group-item-info:focus { color: #31708f; background-color: #c4e3f3; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-info.active, #hrjob-contract a.list-group-item-info.active:hover, #hrjob-contract a.list-group-item-info.active:focus, #hrjob-contract button.list-group-item-info.active, #hrjob-contract button.list-group-item-info.active:hover, @@ -8400,29 +6745,24 @@ fieldset[disabled] background-color: #31708f; border-color: #31708f; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-warning { color: #bf5900; background-color: #fcf8e3; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning, #hrjob-contract button.list-group-item-warning { color: #bf5900; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning .list-group-item-heading, #hrjob-contract button.list-group-item-warning .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning:hover, #hrjob-contract a.list-group-item-warning:focus, #hrjob-contract button.list-group-item-warning:hover, #hrjob-contract button.list-group-item-warning:focus { color: #bf5900; background-color: #faf2cc; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-warning.active, #hrjob-contract a.list-group-item-warning.active:hover, #hrjob-contract a.list-group-item-warning.active:focus, #hrjob-contract button.list-group-item-warning.active, #hrjob-contract button.list-group-item-warning.active:hover, @@ -8431,29 +6771,24 @@ fieldset[disabled] background-color: #bf5900; border-color: #bf5900; } -/* line 4, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract .list-group-item-danger { color: #CF3458; background-color: #f2dede; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger, #hrjob-contract button.list-group-item-danger { color: #CF3458; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger .list-group-item-heading, #hrjob-contract button.list-group-item-danger .list-group-item-heading { color: inherit; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger:hover, #hrjob-contract a.list-group-item-danger:focus, #hrjob-contract button.list-group-item-danger:hover, #hrjob-contract button.list-group-item-danger:focus { color: #CF3458; background-color: #ebcccc; } -/* line 24, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_list-group.scss */ #hrjob-contract a.list-group-item-danger.active, #hrjob-contract a.list-group-item-danger.active:hover, #hrjob-contract a.list-group-item-danger.active:focus, #hrjob-contract button.list-group-item-danger.active, #hrjob-contract button.list-group-item-danger.active:hover, @@ -8462,17 +6797,14 @@ fieldset[disabled] background-color: #CF3458; border-color: #CF3458; } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } -/* line 127, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_list-group.scss */ #hrjob-contract .list-group-item-text { margin-bottom: 0; line-height: 1.3; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel { margin-bottom: 18px; background-color: #FFFFFF; @@ -8481,38 +6813,31 @@ fieldset[disabled] -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-body { padding: 20px; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .panel-body:before, #hrjob-contract .panel-body:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .panel-body:after { clear: both; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-heading { padding: 15px 19px 14px; border-bottom: 1px solid transparent; border-top-right-radius: 1px; border-top-left-radius: 1px; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-heading > .dropdown .dropdown-toggle { color: inherit; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-title { margin-top: 0; margin-bottom: 0; font-size: 15px; color: inherit; } -/* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-title > a, #hrjob-contract .panel-title > small, #hrjob-contract .panel-title > .small, @@ -8520,7 +6845,6 @@ fieldset[disabled] #hrjob-contract .panel-title > .small > a { color: inherit; } -/* line 49, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-footer { padding: 15px 19px 14px; background-color: #FFFFFF; @@ -8528,64 +6852,53 @@ fieldset[disabled] border-bottom-right-radius: 1px; border-bottom-left-radius: 1px; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group, #hrjob-contract .panel > .panel-collapse > .list-group { margin-bottom: 0; } -/* line 67, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group .list-group-item, #hrjob-contract .panel > .panel-collapse > .list-group .list-group-item { border-width: 1px 0; border-radius: 0; } -/* line 74, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group:first-child .list-group-item:first-child, #hrjob-contract .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { border-top: 0; border-top-right-radius: 1px; border-top-left-radius: 1px; } -/* line 82, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .list-group:last-child .list-group-item:last-child, #hrjob-contract .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 1px; border-bottom-left-radius: 1px; } -/* line 89, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { border-top-right-radius: 0; border-top-left-radius: 0; } -/* line 96, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-heading + .list-group .list-group-item:first-child { border-top-width: 0; } -/* line 100, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .list-group + .panel-footer { border-top-width: 0; } -/* line 110, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table, #hrjob-contract .panel > .table-responsive > .table, #hrjob-contract .panel > .panel-collapse > .table { margin-bottom: 0; } -/* line 115, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table caption, #hrjob-contract .panel > .table-responsive > .table caption, #hrjob-contract .panel > .panel-collapse > .table caption { padding-left: 20px; padding-right: 20px; } -/* line 121, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child, #hrjob-contract .panel > .table-responsive:first-child > .table:first-child { border-top-right-radius: 1px; border-top-left-radius: 1px; } -/* line 127, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child, #hrjob-contract .panel > .table:first-child > tbody:first-child > tr:first-child, #hrjob-contract .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, @@ -8593,7 +6906,6 @@ fieldset[disabled] border-top-left-radius: 1px; border-top-right-radius: 1px; } -/* line 131, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, #hrjob-contract .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, @@ -8604,7 +6916,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { border-top-left-radius: 1px; } -/* line 135, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, #hrjob-contract .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, #hrjob-contract .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, @@ -8615,13 +6926,11 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { border-top-right-radius: 1px; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child, #hrjob-contract .panel > .table-responsive:last-child > .table:last-child { border-bottom-right-radius: 1px; border-bottom-left-radius: 1px; } -/* line 149, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child, #hrjob-contract .panel > .table:last-child > tfoot:last-child > tr:last-child, #hrjob-contract .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, @@ -8629,7 +6938,6 @@ fieldset[disabled] border-bottom-left-radius: 1px; border-bottom-right-radius: 1px; } -/* line 153, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, #hrjob-contract .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, @@ -8640,7 +6948,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { border-bottom-left-radius: 1px; } -/* line 157, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, #hrjob-contract .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, #hrjob-contract .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, @@ -8651,24 +6958,20 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { border-bottom-right-radius: 1px; } -/* line 164, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .panel-body + .table, #hrjob-contract .panel > .panel-body + .table-responsive, #hrjob-contract .panel > .table + .panel-body, #hrjob-contract .panel > .table-responsive + .panel-body { border-top: 1px solid #E8EEF0; } -/* line 170, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table > tbody:first-child > tr:first-child th, #hrjob-contract .panel > .table > tbody:first-child > tr:first-child td { border-top: 0; } -/* line 174, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered, #hrjob-contract .panel > .table-responsive > .table-bordered { border: 0; } -/* line 181, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > thead > tr > th:first-child, #hrjob-contract .panel > .table-bordered > thead > tr > td:first-child, #hrjob-contract .panel > .table-bordered > tbody > tr > th:first-child, @@ -8683,7 +6986,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } -/* line 185, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > thead > tr > th:last-child, #hrjob-contract .panel > .table-bordered > thead > tr > td:last-child, #hrjob-contract .panel > .table-bordered > tbody > tr > th:last-child, @@ -8698,7 +7000,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } -/* line 194, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > thead > tr:first-child > td, #hrjob-contract .panel > .table-bordered > thead > tr:first-child > th, #hrjob-contract .panel > .table-bordered > tbody > tr:first-child > td, @@ -8709,7 +7010,6 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { border-bottom: 0; } -/* line 203, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-bordered > tbody > tr:last-child > td, #hrjob-contract .panel > .table-bordered > tbody > tr:last-child > th, #hrjob-contract .panel > .table-bordered > tfoot > tr:last-child > td, @@ -8720,180 +7020,141 @@ fieldset[disabled] #hrjob-contract .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { border-bottom: 0; } -/* line 210, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel > .table-responsive { border: 0; margin-bottom: 0; } -/* line 222, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group { margin-bottom: 18px; } -/* line 226, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel { margin-bottom: 0; border-radius: 2px; } -/* line 230, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel + .panel { margin-top: 5px; } -/* line 235, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-heading { border-bottom: 0; } -/* line 238, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-heading + .panel-collapse > .panel-body, #hrjob-contract .panel-group .panel-heading + .panel-collapse > .list-group { border-top: 1px solid #ddd; } -/* line 244, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-footer { border-top: 0; } -/* line 246, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-group .panel-footer + .panel-collapse .panel-body { border-bottom: 1px solid #ddd; } -/* line 254, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-default { border-color: #D3DEE2; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-heading { color: #4D4D69; background-color: #F3F6F7; border-color: #D3DEE2; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-heading + .panel-collapse > .panel-body { border-top-color: #D3DEE2; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-heading .badge { color: #F3F6F7; background-color: #4D4D69; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-default > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #D3DEE2; } -/* line 257, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-primary { border-color: #0071BD; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-heading { color: #fff; background-color: #0071BD; border-color: #0071BD; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-heading + .panel-collapse > .panel-body { border-top-color: #0071BD; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-heading .badge { color: #0071BD; background-color: #fff; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-primary > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #0071BD; } -/* line 260, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-success { border-color: #d6e9c6; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-heading { color: #4d994d; background-color: #dff0d8; border-color: #d6e9c6; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-heading + .panel-collapse > .panel-body { border-top-color: #d6e9c6; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-heading .badge { color: #dff0d8; background-color: #4d994d; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-success > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #d6e9c6; } -/* line 263, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-info { border-color: #bce8f1; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-heading + .panel-collapse > .panel-body { border-top-color: #bce8f1; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-heading .badge { color: #d9edf7; background-color: #31708f; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-info > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #bce8f1; } -/* line 266, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-warning { border-color: #faebcc; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-heading { color: #bf5900; background-color: #fcf8e3; border-color: #faebcc; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-heading + .panel-collapse > .panel-body { border-top-color: #faebcc; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-heading .badge { color: #fcf8e3; background-color: #bf5900; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-warning > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #faebcc; } -/* line 269, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_panels.scss */ #hrjob-contract .panel-danger { border-color: #ebccd1; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-heading { color: #CF3458; background-color: #f2dede; border-color: #ebccd1; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-heading + .panel-collapse > .panel-body { border-top-color: #ebccd1; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-heading .badge { color: #f2dede; background-color: #CF3458; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_panels.scss */ #hrjob-contract .panel-danger > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #ebccd1; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive { position: relative; display: block; @@ -8901,7 +7162,6 @@ fieldset[disabled] padding: 0; overflow: hidden; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive .embed-responsive-item, #hrjob-contract .embed-responsive iframe, #hrjob-contract .embed-responsive embed, @@ -8915,15 +7175,12 @@ fieldset[disabled] width: 100%; border: 0; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive-16by9 { padding-bottom: 56.25%; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-embed.scss */ #hrjob-contract .embed-responsive-4by3 { padding-bottom: 75%; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well { min-height: 20px; padding: 19px; @@ -8934,22 +7191,18 @@ fieldset[disabled] -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well-lg { padding: 24px; border-radius: 4px; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_wells.scss */ #hrjob-contract .well-sm { padding: 9px; border-radius: 2px; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_close.scss */ #hrjob-contract .close { float: right; font-size: 19.5px; @@ -8960,7 +7213,6 @@ fieldset[disabled] opacity: 0.2; filter: alpha(opacity=20); } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_close.scss */ #hrjob-contract .close:hover, #hrjob-contract .close:focus { color: #000; text-decoration: none; @@ -8968,7 +7220,6 @@ fieldset[disabled] opacity: 0.5; filter: alpha(opacity=50); } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_close.scss */ #hrjob-contract button.close { padding: 0; cursor: pointer; @@ -8976,11 +7227,9 @@ fieldset[disabled] border: 0; -webkit-appearance: none; } -/* line 15, ../scss/civihr/bootstrap/_modals-custom.scss */ .modal-open { overflow: hidden; } -/* line 21, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal { display: none; overflow: hidden; @@ -8993,7 +7242,6 @@ fieldset[disabled] -webkit-overflow-scrolling: touch; outline: 0; } -/* line 37, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal.fade .modal-dialog { -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); @@ -9004,25 +7252,21 @@ fieldset[disabled] -o-transition: -o-transform 0.3s ease-out; transition: transform 0.3s ease-out; } -/* line 41, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); -o-transform: translate(0, 0); transform: translate(0, 0); } -/* line 43, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-open .modal { overflow-x: hidden; overflow-y: auto; } -/* line 49, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-dialog { position: relative; width: auto; margin: 10px; } -/* line 56, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-content { position: relative; background-color: #fff; @@ -9034,7 +7278,6 @@ fieldset[disabled] background-clip: padding-box; outline: 0; } -/* line 69, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-backdrop { position: fixed; top: 0; @@ -9043,62 +7286,50 @@ fieldset[disabled] left: 0; background-color: #000; } -/* line 77, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-backdrop.fade { opacity: 0; filter: alpha(opacity=0); } -/* line 78, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-backdrop.in { opacity: 0.5; filter: alpha(opacity=50); } -/* line 83, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-header { padding: 15px; border-bottom: 1px solid #e5e5e5; min-height: 16.42857143px; } -/* line 90, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-title { margin: 0; line-height: 1.42857143; } -/* line 97, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-body { position: relative; padding: 15px; } -/* line 103, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer { background: #F3F6F7; padding: 15px; text-align: right; border-top: 1px solid #e5e5e5; } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .modal-footer:before, #hrjob-contract .modal-footer:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .modal-footer:after { clear: both; } -/* line 111, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } -/* line 116, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer .btn-group .btn + .btn { margin-left: -1px; } -/* line 120, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-footer .btn-block + .btn-block { margin-left: 0; } -/* line 126, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-scrollbar-measure { position: absolute; top: -9999px; @@ -9107,28 +7338,23 @@ fieldset[disabled] overflow: scroll; } @media (min-width: 768px) { - /* line 137, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-dialog { width: 600px; margin: 30px auto; } - /* line 141, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-content { -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); } - /* line 146, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-sm { width: 300px; } } @media (min-width: 992px) { - /* line 150, ../scss/civihr/bootstrap/_modals-custom.scss */ #hrjob-contract .modal-lg { width: 900px; } } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip { position: absolute; z-index: 1070; @@ -9152,32 +7378,26 @@ fieldset[disabled] opacity: 0; filter: alpha(opacity=0); } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.in { opacity: 0.9; filter: alpha(opacity=90); } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top { margin-top: -3px; padding: 5px 0; } -/* line 20, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.right { margin-left: 3px; padding: 0 5px; } -/* line 21, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom { margin-top: 3px; padding: 5px 0; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.left { margin-left: -3px; padding: 0 5px; } -/* line 26, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip-inner { max-width: 200px; padding: 3px 8px; @@ -9186,7 +7406,6 @@ fieldset[disabled] background-color: #000; border-radius: 2px; } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip-arrow { position: absolute; width: 0; @@ -9194,7 +7413,6 @@ fieldset[disabled] border-color: transparent; border-style: solid; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; @@ -9202,7 +7420,6 @@ fieldset[disabled] border-width: 5px 5px 0; border-top-color: #000; } -/* line 52, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top-left .tooltip-arrow { bottom: 0; right: 5px; @@ -9210,7 +7427,6 @@ fieldset[disabled] border-width: 5px 5px 0; border-top-color: #000; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.top-right .tooltip-arrow { bottom: 0; left: 5px; @@ -9218,7 +7434,6 @@ fieldset[disabled] border-width: 5px 5px 0; border-top-color: #000; } -/* line 66, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.right .tooltip-arrow { top: 50%; left: 0; @@ -9226,7 +7441,6 @@ fieldset[disabled] border-width: 5px 5px 5px 0; border-right-color: #000; } -/* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.left .tooltip-arrow { top: 50%; right: 0; @@ -9234,7 +7448,6 @@ fieldset[disabled] border-width: 5px 0 5px 5px; border-left-color: #000; } -/* line 80, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; @@ -9242,7 +7455,6 @@ fieldset[disabled] border-width: 0 5px 5px; border-bottom-color: #000; } -/* line 87, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom-left .tooltip-arrow { top: 0; right: 5px; @@ -9250,7 +7462,6 @@ fieldset[disabled] border-width: 0 5px 5px; border-bottom-color: #000; } -/* line 94, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_tooltip.scss */ #hrjob-contract .tooltip.bottom-right .tooltip-arrow { top: 0; left: 5px; @@ -9258,7 +7469,6 @@ fieldset[disabled] border-width: 0 5px 5px; border-bottom-color: #000; } -/* line 6, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover { position: absolute; top: 0; @@ -9291,23 +7501,18 @@ fieldset[disabled] -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.top { margin-top: -10px; } -/* line 28, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.right { margin-left: 10px; } -/* line 29, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.bottom { margin-top: 10px; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.left { margin-left: -10px; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover-title { margin: 0; padding: 8px 14px; @@ -9316,11 +7521,9 @@ fieldset[disabled] border-bottom: 1px solid #ebebeb; border-radius: 3px 3px 0 0; } -/* line 42, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover-content { padding: 9px 14px; } -/* line 51, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover > .arrow, #hrjob-contract .popover > .arrow:after { position: absolute; display: block; @@ -9329,16 +7532,13 @@ fieldset[disabled] border-color: transparent; border-style: solid; } -/* line 61, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover > .arrow { border-width: 11px; } -/* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover > .arrow:after { border-width: 10px; content: ""; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.top > .arrow { left: 50%; margin-left: -11px; @@ -9347,7 +7547,6 @@ fieldset[disabled] border-top-color: rgba(0, 0, 0, 0.25); bottom: -11px; } -/* line 77, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.top > .arrow:after { content: " "; bottom: 1px; @@ -9355,7 +7554,6 @@ fieldset[disabled] border-bottom-width: 0; border-top-color: #fff; } -/* line 85, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.right > .arrow { top: 50%; left: -11px; @@ -9364,7 +7562,6 @@ fieldset[disabled] border-right-color: #999999; border-right-color: rgba(0, 0, 0, 0.25); } -/* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.right > .arrow:after { content: " "; left: 1px; @@ -9372,7 +7569,6 @@ fieldset[disabled] border-left-width: 0; border-right-color: #fff; } -/* line 100, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.bottom > .arrow { left: 50%; margin-left: -11px; @@ -9381,7 +7577,6 @@ fieldset[disabled] border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } -/* line 107, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.bottom > .arrow:after { content: " "; top: 1px; @@ -9389,7 +7584,6 @@ fieldset[disabled] border-top-width: 0; border-bottom-color: #fff; } -/* line 116, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.left > .arrow { top: 50%; right: -11px; @@ -9398,7 +7592,6 @@ fieldset[disabled] border-left-color: #999999; border-left-color: rgba(0, 0, 0, 0.25); } -/* line 123, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_popovers.scss */ #hrjob-contract .popover.left > .arrow:after { content: " "; right: 1px; @@ -9406,17 +7599,14 @@ fieldset[disabled] border-left-color: #fff; bottom: -10px; } -/* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel { position: relative; } -/* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner { position: relative; overflow: hidden; width: 100%; } -/* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item { display: none; position: relative; @@ -9424,7 +7614,6 @@ fieldset[disabled] -o-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } -/* line 22, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item > img, #hrjob-contract .carousel-inner > .item > a > img { display: block; @@ -9433,7 +7622,6 @@ fieldset[disabled] line-height: 1; } @media all and (transform-3d), (-webkit-transform-3d) { - /* line 16, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item { -webkit-transition: -webkit-transform 0.6s ease-in-out; -moz-transition: -moz-transform 0.6s ease-in-out; @@ -9446,64 +7634,52 @@ fieldset[disabled] -moz-perspective: 1000px; perspective: 1000px; } - /* line 34, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item.next, #hrjob-contract .carousel-inner > .item.active.right { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); left: 0; } - /* line 39, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item.prev, #hrjob-contract .carousel-inner > .item.active.left { -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); left: 0; } - /* line 44, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .item.next.left, #hrjob-contract .carousel-inner > .item.prev.right, #hrjob-contract .carousel-inner > .item.active { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); left: 0; } } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active, #hrjob-contract .carousel-inner > .next, #hrjob-contract .carousel-inner > .prev { display: block; } -/* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active { left: 0; } -/* line 63, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .next, #hrjob-contract .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } -/* line 70, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .next { left: 100%; } -/* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .prev { left: -100%; } -/* line 76, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .next.left, #hrjob-contract .carousel-inner > .prev.right { left: 0; } -/* line 81, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active.left { left: -100%; } -/* line 84, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-inner > .active.right { left: 100%; } -/* line 93, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control { position: absolute; top: 0; @@ -9518,7 +7694,6 @@ fieldset[disabled] text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); background-color: transparent; } -/* line 109, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control.left { background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); @@ -9526,7 +7701,6 @@ fieldset[disabled] background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); } -/* line 112, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control.right { left: auto; right: 0; @@ -9536,7 +7710,6 @@ fieldset[disabled] background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); } -/* line 119, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control:hover, #hrjob-contract .carousel-control:focus { outline: 0; color: #fff; @@ -9544,7 +7717,6 @@ fieldset[disabled] opacity: 0.9; filter: alpha(opacity=90); } -/* line 128, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev, #hrjob-contract .carousel-control .icon-next, #hrjob-contract .carousel-control .glyphicon-chevron-left, @@ -9555,19 +7727,16 @@ fieldset[disabled] z-index: 5; display: inline-block; } -/* line 138, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev, #hrjob-contract .carousel-control .glyphicon-chevron-left { left: 50%; margin-left: -10px; } -/* line 143, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-next, #hrjob-contract .carousel-control .glyphicon-chevron-right { right: 50%; margin-right: -10px; } -/* line 148, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev, #hrjob-contract .carousel-control .icon-next { width: 20px; @@ -9575,15 +7744,12 @@ fieldset[disabled] line-height: 1; font-family: serif; } -/* line 158, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-prev:before { content: '\2039'; } -/* line 163, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .icon-next:before { content: '\203a'; } -/* line 174, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators { position: absolute; bottom: 10px; @@ -9595,7 +7761,6 @@ fieldset[disabled] list-style: none; text-align: center; } -/* line 185, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators li { display: inline-block; width: 10px; @@ -9608,14 +7773,12 @@ fieldset[disabled] background-color: #000 \9; background-color: transparent; } -/* line 207, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators .active { margin: 0; width: 12px; height: 12px; background-color: #fff; } -/* line 218, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-caption { position: absolute; left: 15%; @@ -9628,12 +7791,10 @@ fieldset[disabled] text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); } -/* line 229, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-caption .btn { text-shadow: none; } @media screen and (min-width: 768px) { - /* line 240, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .glyphicon-chevron-left, #hrjob-contract .carousel-control .glyphicon-chevron-right, #hrjob-contract .carousel-control .icon-prev, @@ -9643,63 +7804,50 @@ fieldset[disabled] margin-top: -10px; font-size: 30px; } - /* line 249, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .glyphicon-chevron-left, #hrjob-contract .carousel-control .icon-prev { margin-left: -10px; } - /* line 253, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-control .glyphicon-chevron-right, #hrjob-contract .carousel-control .icon-next { margin-right: -10px; } - /* line 260, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-caption { left: 20%; right: 20%; padding-bottom: 30px; } - /* line 267, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_carousel.scss */ #hrjob-contract .carousel-indicators { bottom: 20px; } } -/* line 14, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .clearfix:before, #hrjob-contract .clearfix:after { content: " "; display: table; } -/* line 19, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_clearfix.scss */ #hrjob-contract .clearfix:after { clear: both; } -/* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .center-block { display: block; margin-left: auto; margin-right: auto; } -/* line 15, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .pull-right { float: right !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .pull-left { float: left !important; } -/* line 27, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .hide { display: none !important; } -/* line 30, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .show { display: block !important; } -/* line 33, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .invisible { visibility: hidden; } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .text-hide { font: 0/0 a; color: transparent; @@ -9707,34 +7855,27 @@ fieldset[disabled] background-color: transparent; border: 0; } -/* line 45, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .hidden { display: none !important; } -/* line 53, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_utilities.scss */ #hrjob-contract .affix { position: fixed; } @-ms-viewport { width: device-width; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-xs { display: none !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-sm { display: none !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-md { display: none !important; } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-lg { display: none !important; } -/* line 36, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-block, #hrjob-contract .visible-xs-inline, #hrjob-contract .visible-xs-inline-block, @@ -9750,232 +7891,188 @@ fieldset[disabled] display: none !important; } @media (max-width: 767px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-xs { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-xs { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-xs { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-xs, #hrjob-contract td.visible-xs { display: table-cell !important; } } @media (max-width: 767px) { - /* line 54, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-block { display: block !important; } } @media (max-width: 767px) { - /* line 59, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-inline { display: inline !important; } } @media (max-width: 767px) { - /* line 64, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-xs-inline-block { display: inline-block !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-sm { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-sm { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-sm { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-sm, #hrjob-contract td.visible-sm { display: table-cell !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 73, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-sm-block { display: block !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 78, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-sm-inline { display: inline !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 83, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-sm-inline-block { display: inline-block !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-md { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-md { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-md { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-md, #hrjob-contract td.visible-md { display: table-cell !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 92, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-md-block { display: block !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 97, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-md-inline { display: inline !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 102, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-md-inline-block { display: inline-block !important; } } @media (min-width: 1200px) { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-lg { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-lg { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-lg { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-lg, #hrjob-contract td.visible-lg { display: table-cell !important; } } @media (min-width: 1200px) { - /* line 111, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-lg-block { display: block !important; } } @media (min-width: 1200px) { - /* line 116, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-lg-inline { display: inline !important; } } @media (min-width: 1200px) { - /* line 121, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-lg-inline-block { display: inline-block !important; } } @media (max-width: 767px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-xs { display: none !important; } } @media (min-width: 768px) and (max-width: 991px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-sm { display: none !important; } } @media (min-width: 992px) and (max-width: 1199px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-md { display: none !important; } } @media (min-width: 1200px) { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-lg { display: none !important; } } -/* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-print { display: none !important; } @media print { - /* line 7, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .visible-print { display: block !important; } - /* line 10, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract table.visible-print { display: table !important; } - /* line 11, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract tr.visible-print { display: table-row !important; } - /* line 12, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract th.visible-print, #hrjob-contract td.visible-print { display: table-cell !important; } } -/* line 155, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-block { display: none !important; } @media print { - /* line 155, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-block { display: block !important; } } -/* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline { display: none !important; } @media print { - /* line 162, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline { display: inline !important; } } -/* line 169, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline-block { display: none !important; } @media print { - /* line 169, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/_responsive-utilities.scss */ #hrjob-contract .visible-print-inline-block { display: inline-block !important; } } @media print { - /* line 18, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss */ #hrjob-contract .hidden-print { display: none !important; } @@ -10022,7 +8119,6 @@ fieldset[disabled] font-weight: 700; font-style: italic; } -/* line 1, ../scss/civihr/modules/_angular.scss */ #hrjob-contract [ng\:cloak], #hrjob-contract [ng-cloak], #hrjob-contract [data-ng-cloak], @@ -10031,24 +8127,19 @@ fieldset[disabled] #hrjob-contract .x-ng-cloak { display: none !important; } -/* line 1, ../scss/civihr/modules/_utils.scss */ #hrjob-contract .text-normal { font-weight: normal; } -/* line 5, ../scss/civihr/modules/_utils.scss */ #hrjob-contract .cursor-pointer { cursor: pointer; } -/* line 9, ../scss/civihr/modules/_utils.scss */ #hrjob-contract .shadow-global { -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); } -/* line 10, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-highlight { font-weight: 600; } -/* line 14, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-offscreen { clip: rect(0 0 0 0) !important; width: 1px !important; @@ -10062,44 +8153,34 @@ fieldset[disabled] left: 0px !important; top: 0px !important; } -/* line 31, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ng-dirty.ng-invalid > a.select2-choice { border-color: #D44950; } -/* line 35, ../scss/civihr/modules/_select.scss */ #hrjob-contract .select2-result-single { padding-left: 0; } -/* line 39, ../scss/civihr/modules/_select.scss */ #hrjob-contract .select2-locked > .select2-search-choice-close { display: none; } -/* line 43, ../scss/civihr/modules/_select.scss */ #hrjob-contract .select-locked > .ui-select-match-close { display: none; } -/* line 47, ../scss/civihr/modules/_select.scss */ #hrjob-contract body > .select2-container.open { z-index: 9999; /* The z-index Select2 applies to the select2-drop */ } -/* line 54, ../scss/civihr/modules/_select.scss */ #hrjob-contract .selectize-input.selectize-focus { border-color: #007FBB !important; } -/* line 59, ../scss/civihr/modules/_select.scss */ #hrjob-contract .selectize-control > .selectize-input > input { width: 100%; } -/* line 64, ../scss/civihr/modules/_select.scss */ #hrjob-contract .selectize-control > .selectize-dropdown { width: 100%; } -/* line 69, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ng-dirty.ng-invalid > div.selectize-input { border-color: #D44950; } -/* line 77, ../scss/civihr/modules/_select.scss */ #hrjob-contract .btn-default-focus { color: #333; background-color: #EBEBEB; @@ -10109,11 +8190,9 @@ fieldset[disabled] outline-offset: -2px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -/* line 87, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-toggle { position: relative; } -/* line 91, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-toggle > .caret { position: absolute; height: 10px; @@ -10121,30 +8200,25 @@ fieldset[disabled] right: 10px; margin-top: -2px; } -/* line 100, ../scss/civihr/modules/_select.scss */ #hrjob-contract .input-group > .ui-select-bootstrap.dropdown { /* Instead of relative */ position: static; } -/* line 105, ../scss/civihr/modules/_select.scss */ #hrjob-contract .input-group > .ui-select-bootstrap > input.ui-select-search.form-control { border-radius: 2px; /* FIXME hardcoded value :-/ */ border-top-right-radius: 0; border-bottom-right-radius: 0; } -/* line 111, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap > .ui-select-match > .btn { /* Instead of center because of .btn */ text-align: left !important; } -/* line 116, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap > .ui-select-match > .caret { position: absolute; top: 45%; right: 15px; } -/* line 123, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap > .ui-select-choices { width: 100%; height: auto; @@ -10152,17 +8226,14 @@ fieldset[disabled] overflow-x: hidden; margin-top: -1px; } -/* line 131, ../scss/civihr/modules/_select.scss */ #hrjob-contract body > .ui-select-bootstrap.open { z-index: 1000; /* Standard Bootstrap dropdown z-index */ } -/* line 135, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap { height: auto; padding: 3px 3px 0 3px; } -/* line 140, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap input.ui-select-search { background-color: transparent !important; /* To prevent double background when disabled */ @@ -10171,21 +8242,17 @@ fieldset[disabled] height: 1.666666em; margin-bottom: 3px; } -/* line 148, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap .ui-select-match .close { font-size: 1.6em; line-height: 0.75; } -/* line 153, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple.ui-select-bootstrap .ui-select-match-item { outline: 0; margin: 0 3px 3px 0; } -/* line 158, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple .ui-select-match-item { position: relative; } -/* line 162, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple .ui-select-match-item.dropping-before:before { content: ""; position: absolute; @@ -10195,7 +8262,6 @@ fieldset[disabled] margin-right: 2px; border-left: 1px solid #428bca; } -/* line 172, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-multiple .ui-select-match-item.dropping-after:after { content: ""; position: absolute; @@ -10205,7 +8271,6 @@ fieldset[disabled] margin-left: 2px; border-right: 1px solid #428bca; } -/* line 182, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row > a { display: block; padding: 3px 20px; @@ -10215,36 +8280,30 @@ fieldset[disabled] color: #333; white-space: nowrap; } -/* line 192, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row > a:hover, #hrjob-contract .ui-select-bootstrap .ui-select-choices-row > a:focus { text-decoration: none; color: #262626; background-color: #f5f5f5; } -/* line 198, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row.active > a { color: #fff; text-decoration: none; outline: 0; background-color: #428bca; } -/* line 205, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row.disabled > a, #hrjob-contract .ui-select-bootstrap .ui-select-choices-row.active.disabled > a { color: #777; cursor: not-allowed; background-color: #fff; } -/* line 213, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-match.ng-hide-add, #hrjob-contract .ui-select-search.ng-hide-add { display: none !important; } -/* line 219, ../scss/civihr/modules/_select.scss */ #hrjob-contract .ui-select-bootstrap.ng-dirty.ng-invalid > button.btn.ui-select-match { border-color: #D44950; } -/* line 10, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-hidden-input { width: 1px; height: 1px; @@ -10257,7 +8316,6 @@ fieldset[disabled] opacity: 0; overflow: hidden; } -/* line 24, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-root.focussed > .ta-scroll-window.form-control { border-color: #66afe9; outline: 0; @@ -10265,7 +8323,6 @@ fieldset[disabled] -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } -/* line 32, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-editor.ta-html, #hrjob-contract .ta-scroll-window.form-control { min-height: 300px; height: auto; @@ -10273,28 +8330,23 @@ fieldset[disabled] font-family: inherit; font-size: 100%; } -/* line 40, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-scroll-window.form-control { position: relative; padding: 0; } -/* line 45, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-scroll-window > .ta-bind { height: auto; min-height: 300px; padding: 6px 12px; } -/* line 51, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-editor:focus { user-select: text; } -/* line 56, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay { z-index: 100; position: absolute; display: none; } -/* line 62, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-info { position: absolute; bottom: 16px; @@ -10304,7 +8356,6 @@ fieldset[disabled] padding: 0 4px; opacity: 0.7; } -/* line 72, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-background { position: absolute; bottom: 5px; @@ -10314,34 +8365,29 @@ fieldset[disabled] border: 1px solid black; background-color: rgba(0, 0, 0, 0.2); } -/* line 82, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner { width: 10px; height: 10px; position: absolute; } -/* line 88, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-tl { top: 0; left: 0; border-left: 1px solid black; border-top: 1px solid black; } -/* line 95, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-tr { top: 0; right: 0; border-right: 1px solid black; border-top: 1px solid black; } -/* line 102, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-bl { bottom: 0; left: 0; border-left: 1px solid black; border-bottom: 1px solid black; } -/* line 109, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .ta-resizer-handle-overlay > .ta-resizer-handle-corner-br { bottom: 0; right: 0; @@ -10349,7 +8395,6 @@ fieldset[disabled] cursor: se-resize; background-color: white; } -/* line 118, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover { position: absolute; top: 0; @@ -10372,15 +8417,12 @@ fieldset[disabled] -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } -/* line 140, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.top { margin-top: -10px; } -/* line 143, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.bottom { margin-top: 10px; } -/* line 146, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover-title { padding: 8px 14px; margin: 0; @@ -10389,11 +8431,9 @@ fieldset[disabled] border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; } -/* line 154, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover-content { padding: 9px 14px; } -/* line 157, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover > .arrow, #hrjob-contract .popover > .arrow:after { position: absolute; @@ -10403,16 +8443,13 @@ fieldset[disabled] border-color: transparent; border-style: solid; } -/* line 166, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover > .arrow { border-width: 11px; } -/* line 169, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover > .arrow:after { content: ""; border-width: 10px; } -/* line 173, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.top > .arrow { bottom: -11px; left: 50%; @@ -10421,7 +8458,6 @@ fieldset[disabled] border-top-color: rgba(0, 0, 0, 0.25); border-bottom-width: 0; } -/* line 181, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.top > .arrow:after { bottom: 1px; margin-left: -10px; @@ -10429,7 +8465,6 @@ fieldset[disabled] border-top-color: #fff; border-bottom-width: 0; } -/* line 188, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.bottom > .arrow { top: -11px; left: 50%; @@ -10438,7 +8473,6 @@ fieldset[disabled] border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, 0.25); } -/* line 196, ../scss/civihr/modules/_textangular.scss */ #hrjob-contract .popover.bottom > .arrow:after { top: 1px; margin-left: -10px; @@ -10470,7 +8504,6 @@ fieldset[disabled] opacity: 1; } } -/* line 8, ../scss/civihr/modules/_animate.scss */ #hrjob-contract .fade-in { -webkit-animation: fadeIn 0.5s; -o-animation: fadeIn 0.5s; @@ -10516,49 +8549,39 @@ fieldset[disabled] opacity: 1; } } -/* line 21, ../scss/civihr/modules/_animate.scss */ #hrjob-contract .fade-in-up { -webkit-animation: fadeInUp 0.5s; -o-animation: fadeInUp 0.5s; animation: fadeInUp 0.5s; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-success-light { color: #44CB7E; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-success-light:hover, #hrjob-contract a.text-success-light:focus { color: #30ac65; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-info-light { color: #5bc0de; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-info-light:hover, #hrjob-contract a.text-info-light:focus { color: #31b0d5; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-warning-light { color: #E6AB5E; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-warning-light:hover, #hrjob-contract a.text-warning-light:focus { color: #df9432; } -/* line 5, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract .text-danger-light { color: #CF3458; } -/* line 8, ../../../../../../../../../../../../.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bootstrap-sass-3.3.7/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss */ #hrjob-contract a.text-danger-light:hover, #hrjob-contract a.text-danger-light:focus { color: #a82846; } -/* line 6, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar { -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); @@ -10570,113 +8593,88 @@ fieldset[disabled] padding: 11px 20px 10px; max-width: 100%; } -/* line 18, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-primary { background-color: #0071BD; color: #fff; } -/* line 22, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-primary a { color: #fff; } -/* line 25, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-primary a:hover, #hrjob-contract .header-bar.header-bar-primary a:active { color: #e6e6e6; } -/* line 32, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-success { background-color: #44CB7E; color: #fff; } -/* line 37, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-info { background-color: #5bc0de; color: #fff; } -/* line 42, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-warning { background-color: #CF3458; color: #fff; } -/* line 47, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger { background-color: #CF3458; color: #fff; } -/* line 51, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger a { color: #fff; } -/* line 54, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger a:hover, #hrjob-contract .header-bar.header-bar-danger a:active { color: #e6e6e6; } -/* line 61, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-danger-light { background-color: #e6807f; color: #fff; } -/* line 66, ../scss/civihr/partials/_typography.scss */ #hrjob-contract .header-bar.header-bar-dark { background-color: #5d6779; color: #fff; } -/* line 72, ../scss/civihr/partials/_typography.scss */ #hrjob-contract a[disabled]:not(.btn) { color: #4D4D69; } -/* line 75, ../scss/civihr/partials/_typography.scss */ #hrjob-contract a[disabled]:not(.btn):hover { cursor: default; } -/* line 80, ../scss/civihr/partials/_typography.scss */ #hrjob-contract a:active, #hrjob-contract a:focus { outline: 0; } -/* line 2, ../scss/civihr/partials/_global.scss */ #hrjob-contract hr { margin-bottom: 20px; margin-top: 20px; } -/* line 1, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge { font-size: 11px; padding: 3px 7px 4px; } -/* line 5, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-primary { background-color: #0071BD !important; } -/* line 9, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-secondary { background-color: #f4f7f8 !important; } -/* line 13, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-success { background-color: #44CB7E !important; } -/* line 17, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-info { background-color: #5bc0de !important; } -/* line 21, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-warning { background-color: #E6AB5E !important; } -/* line 25, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-dark { background-color: #5d6779 !important; } -/* line 29, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-danger { background-color: #CF3458 !important; } -/* line 33, ../scss/civihr/partials/_badge.scss */ #hrjob-contract .badge.badge-danger-light { background-color: #e6807f !important; } -/* line 1, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -10684,73 +8682,59 @@ fieldset[disabled] font-weight: normal; text-transform: uppercase; } -/* line 8, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-primary:hover { background-color: #005c99; border-color: #005c99; } -/* line 14, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-success { color: #464354; } -/* line 17, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-success:hover { background-color: #33b86c; border-color: #33b86c; color: #000000; } -/* line 26, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-info:hover { background-color: #3db5d8; border-color: #3db5d8; } -/* line 32, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning { color: #464354; } -/* line 35, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning:hover { background-color: #e19b3f; border-color: #e19b3f; color: #000000; } -/* line 44, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.btn-danger:hover { background-color: #b52b4b; border-color: #b52b4b; } -/* line 50, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn.disabled, #hrjob-contract .btn[disabled], fieldset[disabled] #hrjob-contract .btn { cursor: not-allowed; opacity: 1; filter: alpha(opacity=100); } -/* line 58, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-link { font-weight: 600; } -/* line 62, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray { color: #4D4D69; background-color: #fff; border-color: #4D4D69; } -/* line 67, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray:hover, #hrjob-contract .btn-gray:focus, #hrjob-contract .btn-gray.btn-focus { background-color: #3e3e54; color: #fff; } -/* line 74, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray.active { background-color: #3e3e54; color: #fff; } -/* line 78, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-gray.active:hover, #hrjob-contract .btn-gray.active:focus, #hrjob-contract .btn-gray.active.btn-focus { background-color: #3e3e54; color: #fff; } -/* line 87, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse { background: none; border: 0 none; @@ -10761,23 +8745,19 @@ fieldset[disabled] text-transform: none; vertical-align: baseline; } -/* line 97, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse:hover { color: #373e4b; } -/* line 101, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse:active { -webkit-box-shadow: none; box-shadow: none; } -/* line 105, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-collapse .fa { margin-right: 3px; font-size: 9px; position: relative; top: -1px; } -/* line 113, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .hrjc-context-menu-toggle { color: #464354; padding: 0px 10px; @@ -10785,25 +8765,20 @@ fieldset[disabled] display: inline-block; font-size: 14px; } -/* line 120, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .hrjc-context-menu-toggle:hover { color: #0071BD; } -/* line 126, ../scss/civihr/partials/_buttons.scss */ #hrjob-contract .btn-group.open .hrjc-context-menu-toggle.dropdown-toggle { -webkit-box-shadow: none; box-shadow: none; } -/* line 1, ../scss/civihr/partials/_dropdowns.scss */ #hrjob-contract .dropdown-menu { padding: 0; } -/* line 4, ../scss/civihr/partials/_dropdowns.scss */ #hrjob-contract .dropdown-menu > li > a { padding: 8px 14px; line-height: 18px; } -/* line 9, ../scss/civihr/partials/_dropdowns.scss */ #hrjob-contract .dropdown-menu [class^="fa-"], #hrjob-contract .dropdown-menu [class^="glyphicon-"], #hrjob-contract .dropdown-menu [class*=" fa-"], @@ -10811,7 +8786,6 @@ fieldset[disabled] text-align: center; width: 1.25em; } -/* line 3, ../scss/civihr/partials/_forms.scss */ #hrjob-contract input[type='radio'], #hrjob-contract input[type='checkbox'], #hrjob-contract .radio input[type='radio'], @@ -10820,69 +8794,54 @@ fieldset[disabled] #hrjob-contract .checkbox-inline input[type='checkbox'] { margin-top: 2px; } -/* line 12, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-file { padding: 6px 12px; } -/* line 16, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-static { padding-bottom: 8px; padding-top: 6px; } -/* line 22, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-control-static .subfield { display: block; } -/* line 28, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label { text-align: left; } -/* line 31, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label.control-label-line-2 { margin-top: -3px; padding-top: 0; } -/* line 37, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback { /* stylelint-disable selector-max-compound-selectors */ /* stylelint-enable selector-max-compound-selectors */ } -/* line 39, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback select + .form-control-feedback { right: 28px; } -/* line 43, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback [uib-datepicker-popup] + .form-control-feedback { right: 41px; } -/* line 47, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback .form-inline { float: left; position: relative; } -/* line 51, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .has-feedback .form-inline select + .form-control-feedback { right: 10px; } -/* line 59, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .well .form-group { margin-bottom: 0; } -/* line 62, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-horizontal .well .form-group + .form-group { /* stylelint-disable-line selector-max-compound-selectors */ margin-top: 15px; } -/* line 69, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .text-required { color: #f00; } -/* line 74, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .form-group.required .control-label::after { color: #f00; content: '*'; } -/* line 80, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .control-label, #hrjob-contract .checkbox-inline, #hrjob-contract .radio-inline, @@ -10891,114 +8850,91 @@ fieldset[disabled] color: #464354; font-weight: 600; } -/* line 89, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .checkbox-label, #hrjob-contract .radio-label { /* stylelint-disable-line scss/at-extend-no-missing-placeholder */ } -/* line 94, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .drop-zone { background-color: #F3F6F7; border: 1px dashed #C2CFD8; color: #464354; } -/* line 100, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-placeholder, #hrjob-contract .ui-select-match-text { font-weight: normal; text-transform: none; } -/* line 106, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-match-text { color: #4D4D69; } -/* line 110, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled] { background-color: #F3F6F7; opacity: 1; } -/* line 114, ../scss/civihr/partials/_forms.scss */ #hrjob-contract .ui-select-toggle[disabled]:hover, #hrjob-contract .ui-select-toggle[disabled]:focus, #hrjob-contract .ui-select-toggle[disabled]:active { background-color: #F3F6F7; } -/* line 1, ../scss/civihr/partials/_iframe.scss */ #hrjob-contract .hrjc-iframe { opacity: 0; } -/* line 4, ../scss/civihr/partials/_iframe.scss */ #hrjob-contract .hrjc-iframe.hrjc-iframe-ready { -webkit-transition: opacity 0.5s; -o-transition: opacity 0.5s; transition: opacity 0.5s; opacity: 1; } -/* line 1, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-header { background-color: #F3F6F7; } -/* line 4, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-header .close { color: #464354; font-size: 18px; margin-top: 3px; opacity: 1; } -/* line 10, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-header .close:hover { color: #000000; } -/* line 16, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-body { background-color: #FFFFFF; } -/* line 21, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-progress .modal-body { overflow: hidden; padding-top: 25px; } -/* line 26, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-progress .progress { margin-bottom: 2px; } -/* line 30, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-progress .progress-bar { min-width: 2.5em; } -/* line 35, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-title { font-size: 18px; } -/* line 42, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-content .form-horizontal .row, #hrjob-contract .modal-content .form-horizontal .form-group { margin-left: -15px; margin-right: -15px; } -/* line 50, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-content .form-horizontal .modal-body { padding-bottom: 0; } -/* line 55, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-content [class^="col-"], #hrjob-contract .modal-content [class*=" col-"] { padding-left: 15px; padding-right: 15px; } @media (min-width: 768px) { - /* line 65, ../scss/civihr/partials/_modals.scss */ #hrjob-contract .modal-dialog { margin: 60px auto; } } -/* line 1, ../scss/civihr/partials/_page-contact.scss */ #hrjob-contract .hrjc-page-contact { padding: 20px; } -/* line 1, ../scss/civihr/partials/_pagination.scss */ #hrjob-contract .pagination { margin-top: 23px; } -/* line 1, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel { display: block; position: static; @@ -11008,115 +8944,92 @@ fieldset[disabled] -webkit-box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); box-shadow: 1px 4px 15px 0px rgba(0, 0, 0, 0.1); } -/* line 10, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading { color: #464354; font-weight: 600; } -/* line 14, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading .btn-group.btn-group-sm { margin-top: -2px; margin-bottom: -3px; } -/* line 17, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading .btn-group.btn-group-sm > .btn { padding: 5px 13px; text-transform: none; } -/* line 23, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-heading .btn-collapse { margin: 4px 0 2px; } -/* line 30, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter { margin-bottom: 0; } -/* line 34, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter__filter { font-weight: normal; } -/* line 37, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter__filter:first-child { border-radius: 2px 0 0 2px; } -/* line 41, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-filter__filter:last-child { border-radius: 0 2px 2px 0; } -/* line 48, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-title { font-size: 18px; line-height: 1.42857143; } -/* line 53, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-light { border: 0 none; -webkit-box-shadow: 0 0 0 0; box-shadow: 0 0 0 0; } -/* line 57, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-light > .panel-heading { border-bottom: 0 none; padding: 12px 20px 13px; } -/* line 62, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-light > .panel-footer { border-top: 1px solid #E8EEF0; padding: 16px 20px; } -/* line 69, ../scss/civihr/partials/_panels.scss */ #hrjob-contract .panel-secondary > .panel-body, #hrjob-contract .panel-secondary .list-group, #hrjob-contract .panel-secondary .list-group-item { background-color: #f4f7f8; } -/* line 4, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-choices-row:not(.active) > a small { color: #586277; } -/* line 10, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap input { font-weight: normal; } -/* line 14, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap .ui-select-toggle { padding-right: 30px; } -/* line 18, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple { min-height: 32px; padding: 2px 2px 0 2px; } -/* line 22, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple input.ui-select-search { height: 1.9em; text-indent: 10px; } -/* line 27, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple .ui-select-match .close { line-height: 0.8; } -/* line 31, ../scss/civihr/partials/_select.scss */ #hrjob-contract .ui-select-bootstrap.ui-select-multiple .ui-select-match-item { border-color: #0071BD; margin: 0 2px 2px 1px; padding: 2px 8px; text-transform: none; } -/* line 7, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > tbody > tr > td .hrjc-context-menu-toggle, #hrjob-contract .table > tfoot > tr > td .hrjc-context-menu-toggle { margin: -2px 0; position: relative; top: 1px; } -/* line 13, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > tbody > tr > td.checkbox, #hrjob-contract .table > tfoot > tr > td.checkbox { padding: 11px 8px 10px; text-align: left; } -/* line 24, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > thead > tr > th, #hrjob-contract .table > thead > tr > th.checkbox { border: 0 none; @@ -11128,7 +9041,6 @@ fieldset[disabled] text-align: left; text-transform: none; } -/* line 37, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > thead > tr > th label, #hrjob-contract .table > thead > tr > th .checkbox-label, #hrjob-contract .table > thead > tr > th .radio-label, #hrjob-contract .table > thead > tr > th.checkbox label, @@ -11136,16 +9048,13 @@ fieldset[disabled] #hrjob-contract .table > thead > tr > th.checkbox .radio-label { font-weight: 600; } -/* line 42, ../scss/civihr/partials/_tables.scss */ #hrjob-contract .table > thead > tr > td { border-top: 0 none; } -/* line 1, ../scss/civihr/partials/_tooltip.scss */ #hrjob-contract .tooltip-inner { text-align: left; width: 350px; } -/* line 1, ../scss/civihr/partials/_wells.scss */ #hrjob-contract .well { -webkit-box-shadow: none; box-shadow: none; @@ -11174,51 +9083,41 @@ fieldset[disabled] opacity: 1; } } -/* line 6, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-btn-add-contract { opacity: 0; } -/* line 10, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-btn-add-contract.ng-active { -webkit-transition: all linear 0.2s; transition: all linear 0.2s; opacity: 1; } -/* line 17, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-list-contract-item > * { opacity: 0; } -/* line 21, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-list-contract-item.ng-active > * { -webkit-transition: all linear 0.2s; transition: all linear 0.2s; opacity: 1; } -/* line 27, ../scss/hrjc/modules/_animate.scss */ #hrjob-contract .hrjc-list-contract-item .hrjc-loader { opacity: 1; } -/* line 1, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .ng-animate.item:not(.left):not(.right) { -webkit-transition: 0s ease-in-out left; transition: 0s ease-in-out left; } -/* line 5, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-datepicker .uib-title { width: 100%; } -/* line 8, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-day button, #hrjob-contract .uib-month button, #hrjob-contract .uib-year button { min-width: 100%; } -/* line 13, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-left, #hrjob-contract .uib-right { width: 100%; } -/* line 17, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-position-measure { display: block !important; visibility: hidden !important; @@ -11226,7 +9125,6 @@ fieldset[disabled] top: -9999px !important; left: -9999px !important; } -/* line 24, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-position-scrollbar-measure { position: absolute !important; top: -9999px !important; @@ -11234,21 +9132,17 @@ fieldset[disabled] height: 50px !important; overflow: scroll !important; } -/* line 31, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-position-body-scrollbar-measure { overflow: scroll !important; } -/* line 34, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-datepicker-popup.dropdown-menu { display: block; float: none; margin: 0; } -/* line 39, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-button-bar { padding: 10px 9px 2px; } -/* line 42, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract [uib-tooltip-popup].tooltip.top-left > .tooltip-arrow, #hrjob-contract [uib-tooltip-popup].tooltip.top-right > .tooltip-arrow, #hrjob-contract [uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow, @@ -11303,97 +9197,78 @@ fieldset[disabled] right: auto; margin: 0; } -/* line 96, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract [uib-popover-popup].popover, #hrjob-contract [uib-popover-html-popup].popover, #hrjob-contract [uib-popover-template-popup].popover { display: block !important; } -/* line 101, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-time input { width: 50px; } -/* line 104, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract [uib-typeahead-popup].dropdown-menu { display: block; } -/* line 107, ../scss/hrjc/modules/_ui-bootstrap.scss */ #hrjob-contract .uib-tab a:hover { color: #0071BD; } -/* line 3, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-group-action .dropdown-menu .checkbox { font-size: 12px; margin-bottom: 5px; margin-top: 5px; padding: 0px 10px; } -/* line 9, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-group-action .dropdown-menu .checkbox input[type="checkbox"] { margin-top: 1px; } -/* line 13, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-group-action .dropdown-menu .checkbox label, #hrjob-contract .btn-group-action .dropdown-menu .checkbox .checkbox-label, #hrjob-contract .btn-group-action .dropdown-menu .checkbox .radio-label { min-height: 17px; } -/* line 22, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-success { color: #464354; } -/* line 25, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-success:hover { color: #000000; } -/* line 30, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning { color: #464354; } -/* line 33, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.btn-warning:hover { color: #000000; } -/* line 38, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled, #hrjob-contract .btn[disabled], fieldset[disabled] #hrjob-contract .btn { cursor: not-allowed; opacity: 1; filter: alpha(opacity=100); } -/* line 44, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-primary, #hrjob-contract .btn[disabled].btn-primary, fieldset[disabled] #hrjob-contract .btn.btn-primary { background-color: #57bbff; border-color: #57bbff; } -/* line 48, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-success, #hrjob-contract .btn[disabled].btn-success, fieldset[disabled] #hrjob-contract .btn.btn-success { background-color: #bcecd1; border-color: #bcecd1; color: #908ca4; } -/* line 53, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-warning, #hrjob-contract .btn[disabled].btn-warning, fieldset[disabled] #hrjob-contract .btn.btn-warning { background-color: #fbf0e2; border-color: #fbf0e2; color: #908ca4; } -/* line 58, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn.disabled.btn-danger, #hrjob-contract .btn[disabled].btn-danger, fieldset[disabled] #hrjob-contract .btn.btn-danger { background-color: #ecb0be; border-color: #ecb0be; } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-danger-outline { background-color: transparent; border-color: #CF3458; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-danger-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-danger-outline:focus:not(.disabled):not([disabled]) { background-color: #b52b4b; border-color: #b52b4b; color: #FFFFFF; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-danger-outline.disabled, #hrjob-contract .btn-danger-outline[disabled], fieldset[disabled] #hrjob-contract .btn-danger-outline { border-color: #ecb0be; color: #908ca4; @@ -11401,19 +9276,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-primary-outline { background-color: transparent; border-color: #0071BD; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-primary-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-primary-outline:focus:not(.disabled):not([disabled]) { background-color: #005c99; border-color: #005c99; color: #FFFFFF; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-primary-outline.disabled, #hrjob-contract .btn-primary-outline[disabled], fieldset[disabled] #hrjob-contract .btn-primary-outline { border-color: #57bbff; color: #908ca4; @@ -11421,19 +9293,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-secondary-outline { background-color: transparent; border-color: #4D4D69; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-secondary-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-secondary-outline:focus:not(.disabled):not([disabled]) { background-color: #3e3e54; border-color: #3e3e54; color: #FFFFFF; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-secondary-outline.disabled, #hrjob-contract .btn-secondary-outline[disabled], fieldset[disabled] #hrjob-contract .btn-secondary-outline { border-color: #9a9ab5; color: #908ca4; @@ -11441,19 +9310,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-success-outline { background-color: transparent; border-color: #44CB7E; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-success-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-success-outline:focus:not(.disabled):not([disabled]) { background-color: #33b86c; border-color: #33b86c; color: #000000; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-success-outline.disabled, #hrjob-contract .btn-success-outline[disabled], fieldset[disabled] #hrjob-contract .btn-success-outline { border-color: #bcecd1; color: #908ca4; @@ -11461,19 +9327,16 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 76, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-warning-outline { background-color: transparent; border-color: #E6AB5E; color: #464354; } -/* line 81, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-warning-outline:hover:not(.disabled):not([disabled]), #hrjob-contract .btn-warning-outline:focus:not(.disabled):not([disabled]) { background-color: #e19b3f; border-color: #e19b3f; color: #000000; } -/* line 88, ../scss/hrjc/partials/_buttons.scss */ #hrjob-contract .btn-warning-outline.disabled, #hrjob-contract .btn-warning-outline[disabled], fieldset[disabled] #hrjob-contract .btn-warning-outline { border-color: #fbf0e2; color: #908ca4; @@ -11481,12 +9344,10 @@ fieldset[disabled] opacity: 1; filter: alpha(opacity=100); } -/* line 1, ../scss/hrjc/partials/_collapse.scss */ #hrjob-contract .hrjc-contract-details { padding-bottom: 10px; padding-top: 10px; } -/* line 8, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select { background: #ffffff; border-radius: 2px; @@ -11496,7 +9357,6 @@ fieldset[disabled] position: relative; vertical-align: top; } -/* line 17, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select > select { background: transparent; padding: 6px 44px 6px 12px; @@ -11507,11 +9367,9 @@ fieldset[disabled] -webkit-appearance: none; -webkit-border-radius: 0px; } -/* line 28, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select > select::-ms-expand { display: none; } -/* line 33, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select:after { content: '\f0d7'; border-left: 1px solid #C2CFD8; @@ -11527,93 +9385,74 @@ fieldset[disabled] line-height: 33px; -webkit-font-smoothing: antialiased; } -/* line 51, ../scss/hrjc/partials/_forms.scss */ .ie9 #hrjob-contract .chr_custom-select > select { padding-right: 10px; } -/* line 55, ../scss/hrjc/partials/_forms.scss */ .ie9 #hrjob-contract .chr_custom-select:after { display: none; } -/* line 61, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select--full { display: block; width: auto; } -/* line 66, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select--transparent { background: transparent; } -/* line 69, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .chr_custom-select--transparent option { background: #ffffff; } -/* line 78, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .has-feedback .chr_custom-select > select { padding-right: 44px; } -/* line 81, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .has-feedback .chr_custom-select > select + .form-control-feedback { right: 27px !important; } -/* line 88, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .input-group-addon { border-left: 0 !important; cursor: pointer; width: 0; } -/* line 93, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .input-group-addon a { color: #333333; } -/* line 103, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-horizontal .control-label.control-label-checkbox { padding-top: 0; } -/* line 114, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-group.required.has-has-feedback .control-label, #hrjob-contract .form-group.required.has-error .control-label, #hrjob-contract .form-group.required.has-success .control-label { color: #464354; } -/* line 119, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-group.required .control-label:after { color: #CF3458; margin-left: 5px; } -/* line 126, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-inline .form-control { vertical-align: top; } -/* line 131, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-control { -webkit-box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); } -/* line 134, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-control:focus { -webkit-box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 3px 0 rgba(0, 0, 0, 0.2); border-color: #0071BD; } -/* line 139, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .form-control .input-group-addon, #hrjob-contract .form-control .input-group-btn, #hrjob-contract .form-control .input-group .form-control { display: table-cell; border-radius: #C2CFD8; } -/* line 149, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .ui-select-match .btn-default, #hrjob-contract .ui-select-container + .input-group-btn .btn-default { border-color: #C2CFD8; border-radius: #C2CFD8 0 0 #C2CFD8; } -/* line 153, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .ui-select-match .btn-default:hover, #hrjob-contract .ui-select-match .btn-default:focus, #hrjob-contract .ui-select-container + .input-group-btn .btn-default:hover, #hrjob-contract .ui-select-container + .input-group-btn .btn-default:focus { background-color: #FFFFFF; } -/* line 157, ../scss/hrjc/partials/_forms.scss */ #hrjob-contract .ui-select-match .btn-default:hover i, #hrjob-contract .ui-select-match .btn-default:hover .fa, #hrjob-contract .ui-select-match .btn-default:focus i, #hrjob-contract .ui-select-match .btn-default:focus .fa, @@ -11623,36 +9462,29 @@ fieldset[disabled] #hrjob-contract .ui-select-container + .input-group-btn .btn-default:focus .fa { color: #333; } -/* line 2, ../scss/hrjc/partials/_history.scss */ #hrjob-contract .hrjc-history .btn-group-action { margin-top: -31px; } -/* line 6, ../scss/hrjc/partials/_history.scss */ #hrjob-contract .hrjc-history .table { margin-bottom: 0; } -/* line 1, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract { list-style: none; margin: 0; padding: 0; } -/* line 12, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract-item { min-height: 108px; } -/* line 15, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract-item .tab-content { margin-bottom: 20px; } -/* line 19, ../scss/hrjc/partials/_list.scss */ #hrjob-contract .hrjc-list-contract-item .btn-collapse { color: #4D4D69; font-size: 12px; font-weight: normal; text-transform: none; } -/* line 1, ../scss/hrjc/partials/_loader.scss */ #hrjob-contract .hrjc-loader { left: 50%; margin-top: 1%; @@ -11660,52 +9492,42 @@ fieldset[disabled] top: 50%; z-index: 1000; } -/* line 3, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .modal-header .btn-group-action { float: right; margin-right: 20px; margin-top: -2px; } -/* line 10, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .table { font-size: 13px; } -/* line 13, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .table .table { background-color: transparent; font-size: 12px; } -/* line 17, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .table .table th { font-size: 12px; } -/* line 23, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .pagination { margin-top: 10px; margin-bottom: 10px; } -/* line 31, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-contract .modal-body { background-color: #fff; } @media (min-width: 992px) { - /* line 37, ../scss/hrjc/partials/_modals.scss */ #hrjob-contract .modal-revision .modal-dialog { width: 1140px; } } -/* line 1, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .nav-tabs { border-bottom: 0 none; } -/* line 4, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .nav-tabs > li > a { border-top-right-radius: 2px; border-top-left-radius: 2px; font-size: 13px; font-weight: 600; } -/* line 12, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tab-content > .tab-pane { background-color: #F3F6F7; -moz-border-radius: 2px; @@ -11715,406 +9537,324 @@ fieldset[disabled] border-style: solid; border-width: 1px; } -/* line 16, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tab-content > .tab-pane:first-child { -moz-border-radius: 0 2px 2px 2px; -webkit-border-radius: 0; border-radius: 0 2px 2px 2px; } -/* line 29, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs { border-top: 1px solid #D3DEE2; } -/* line 32, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > li { margin-top: -1px; margin-bottom: 0; } -/* line 36, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > li > a { -moz-border-radius: 0 0 2px 2px; -webkit-border-radius: 0; border-radius: 0 0 2px 2px; } -/* line 39, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > li > a:hover, #hrjob-contract .tabs-below > .nav-tabs > li > a:focus { border-top-color: #D3DEE2; border-bottom-color: transparent; } -/* line 46, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-below > .nav-tabs > .active a, #hrjob-contract .tabs-below > .nav-tabs > .active a:hover, #hrjob-contract .tabs-below > .nav-tabs > .active a:focus { border-color: transparent #D3DEE2 #D3DEE2 #D3DEE2; } -/* line 54, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs, #hrjob-contract .tabs-right > .nav-tabs { width: 18%; } -/* line 57, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li, #hrjob-contract .tabs-right > .nav-tabs > li { float: none; } -/* line 60, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li > a, #hrjob-contract .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; padding: 15px; } -/* line 69, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .tab-content, #hrjob-contract .tabs-right > .tab-content { width: 82%; } -/* line 75, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs { float: left; margin-left: 0; border-right: 1px solid #D3DEE2; margin-right: -1px; } -/* line 81, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li > a { margin-right: -1px; -moz-border-radius: 2px 0 0 2px; -webkit-border-radius: 2px; border-radius: 2px 0 0 2px; } -/* line 85, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > li > a:hover, #hrjob-contract .tabs-left > .nav-tabs > li > a:focus { border-color: #F3F6F7 #D3DEE2 #F3F6F7 #F3F6F7; } -/* line 91, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .nav-tabs > .active a, #hrjob-contract .tabs-left > .nav-tabs > .active a:hover, #hrjob-contract .tabs-left > .nav-tabs > .active a:focus { border-color: #D3DEE2 transparent #D3DEE2 #D3DEE2; *border-right-color: #fff; } -/* line 98, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-left > .tab-content { float: left; } -/* line 104, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs { float: right; margin-right: 0px; border-left: 1px solid #D3DEE2; margin-left: -1px; } -/* line 110, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs > li > a { margin-left: -1px; -moz-border-radius: 0 2px 2px 0; -webkit-border-radius: 0; border-radius: 0 2px 2px 0; } -/* line 114, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs > li > a:hover, #hrjob-contract .tabs-right > .nav-tabs > li > a:focus { border-color: #F3F6F7 #F3F6F7 #F3F6F7 #D3DEE2; } -/* line 120, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .nav-tabs > .active a, #hrjob-contract .tabs-right > .nav-tabs > .active a:hover, #hrjob-contract .tabs-right > .nav-tabs > .active a:focus { border-color: #D3DEE2 #D3DEE2 #D3DEE2 transparent; *border-left-color: #fff; } -/* line 127, ../scss/hrjc/partials/_navs.scss */ #hrjob-contract .tabs-right > .tab-content { float: right; } -/* line 1, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action { padding-bottom: 2px; padding-top: 10px; } -/* line 7, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .badge { margin-top: 6px; } -/* line 11, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn { margin-left: 7px; padding-bottom: 8px; padding-top: 8px; } -/* line 19, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn .glyphicon { margin-right: 3px; } -/* line 23, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn.btn-sm, #hrjob-contract .hrjc-panel-action .btn-group-sm > .btn { padding: 4px; margin-right: -10px; margin-left: 0; } -/* line 29, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .btn:first-child { margin-left: 0; } -/* line 34, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .form-control-static { text-transform: none; font-weight: normal; } -/* line 39, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .form-group { margin-bottom: 0; } -/* line 43, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action .row, #hrjob-contract .hrjc-panel-action .form-horizontal .form-group { margin-left: -5px; margin-right: -5px; } -/* line 53, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-action .control-label { font-size: 16px; } -/* line 57, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-action .form-control-static { font-size: 14px; padding-bottom: 6px; padding-top: 10px; } -/* line 67, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-info .control-label, #hrjob-contract .hrjc-panel-action > .hrjc-row-info .form-control-static { color: #4D4D69; } -/* line 72, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action > .hrjc-row-info .badge { font-size: 12px; padding: 3px 8px; } -/* line 78, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action [class^="col-"], #hrjob-contract .hrjc-panel-action [class*=" col-"] { padding-left: 5px; padding-right: 5px; } -/* line 86, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action hr { margin-bottom: 2px; margin-top: 10px; } -/* line 93, ../scss/hrjc/partials/_panels.scss */ #hrjob-contract .hrjc-panel-action + .panel-body { padding-bottom: 10px; padding-top: 10px; } -/* line 1, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary-container { min-height: 387px; } -/* line 5, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary { padding: 20px 20px 10px 20px; } -/* line 9, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary .form-control-static .subfield:not(:first-child) { margin-top: 8px; } -/* line 14, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary .form-group { margin-bottom: 10px; } -/* line 18, ../scss/hrjc/partials/_summary.scss */ #hrjob-contract .hrjc-summary strong { color: #464354; } -/* line 1, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay { table-layout: fixed; } -/* line 4, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .col-action { width: 48px; } -/* line 16, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .col-index { width: 35px; } -/* line 28, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .action { vertical-align: middle; } -/* line 32, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-pay .index { font-weight: bold; vertical-align: middle; } -/* line 38, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload { table-layout: fixed; } -/* line 41, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .btn-xs, #hrjob-contract .hrjc-table-upload .btn-group-xs > .btn { font-size: 11px; } -/* line 45, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload td { overflow: hidden; text-overflow: ellipsis; } -/* line 50, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .col-index { width: 32px; } -/* line 54, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .col-size { width: 80px; } -/* line 58, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .col-action { width: 95px; } -/* line 62, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-upload .progress { margin-bottom: 0; } -/* line 69, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-sort > thead > tr, #hrjob-contract .hrjc-table-sort > tbody > tr:nth-child(even) { background-color: #F3F6F7; } -/* line 74, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-sort th > a { color: #464354; padding-right: 15px; position: relative; } -/* line 79, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-sort th > a .fa { position: absolute; right: 0; top: 50%; margin-top: -6px; } -/* line 89, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .table-responsive::-webkit-scrollbar-track { background-color: #E8EEF0; } -/* line 93, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .table-responsive::-webkit-scrollbar { height: 10px; background-color: #4D4D69; } -/* line 98, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .table-responsive::-webkit-scrollbar-thumb { border-radius: 10px; background-color: #4D4D69; } -/* line 106, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-revision-list .btn-group-action { min-width: 80px; vertical-align: baseline; } -/* line 110, ../scss/hrjc/partials/_tables.scss */ #hrjob-contract .hrjc-table-revision-list .btn-group-action .glyphicon-search { font-size: 11px; } -/* line 1, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard { /** Wizard - Tab - General **/ } -/* line 7, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .tabs-left > .tab-content { float: left; margin-bottom: 20px; } -/* line 11, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .tabs-left > .tab-content > .tab-pane { min-height: 365px; padding: 15px; } -/* line 18, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .tooltip-inner { max-width: 350px; width: 350px; } -/* line 23, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard h4:not(.modal-title) { font-size: 16px; margin-top: 0; } -/* line 27, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard h4:not(.modal-title) + hr { margin-top: 16px; } -/* line 33, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .input-inline-xs { max-width: 42px; } -/* line 37, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .input-inline-sm { max-width: 100px; } -/* line 41, ../scss/hrjc/partials/_wizard.scss */ #hrjob-contract .hrjc-wizard .input-inline-lg { max-width: 420px; } -/* line 1, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ + #hrjob-contract [uib-datepicker-popup] { border-color: #C2CFD8; } -/* line 4, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract [uib-datepicker-popup] .form-control { border-color: #C2CFD8; } -/* line 10, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract [uib-datepicker-popup-wrap] + .input-group-btn > button { border-color: #C2CFD8; color: #C2CFD8; } -/* line 16, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-left, #hrjob-contract .uib-right, #hrjob-contract .uib-title { border: 0; color: #464354; } -/* line 22, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-left:hover, #hrjob-contract .uib-right:hover, #hrjob-contract .uib-title:hover { background: transparent; } -/* line 29, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-left i, #hrjob-contract .uib-right i { font-weight: 300; } -/* line 35, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-title strong { font-size: 12px; font-weight: 700; } -/* line 41, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-daypicker { outline: 0; } -/* line 44, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-daypicker th { background: #FFFFFF; color: #586277; padding: 7px; vertical-align: middle; } -/* line 51, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-daypicker tbody { background: transparent; border-top: 0; box-shadow: 0; } -/* line 58, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day, #hrjob-contract .uib-month, #hrjob-contract .uib-year { padding: 7px; } -/* line 63, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .text-muted, #hrjob-contract .uib-month .text-muted, #hrjob-contract .uib-year .text-muted { color: #dcdddd; } -/* line 67, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .text-info, #hrjob-contract .uib-month .text-info, #hrjob-contract .uib-year .text-info { @@ -12122,7 +9862,6 @@ fieldset[disabled] border-radius: 50%; color: #0071BD; } -/* line 73, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default, #hrjob-contract .uib-month .btn-default, #hrjob-contract .uib-year .btn-default { @@ -12133,13 +9872,11 @@ fieldset[disabled] min-width: 0; padding: 7px; } -/* line 81, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default span, #hrjob-contract .uib-month .btn-default span, #hrjob-contract .uib-year .btn-default span { padding: 0 !important; } -/* line 85, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default.active, #hrjob-contract .uib-month .btn-default.active, #hrjob-contract .uib-year .btn-default.active { @@ -12148,28 +9885,26 @@ fieldset[disabled] box-shadow: none; color: #FFFFFF; } -/* line 91, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-day .btn-default.active .text-info, #hrjob-contract .uib-month .btn-default.active .text-info, #hrjob-contract .uib-year .btn-default.active .text-info { color: inherit; } -/* line 98, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ #hrjob-contract .uib-datepicker-popup { border: 0; padding: 10px !important; } -/* line 105, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ + .mobile [type='date'][uib-datepicker-popup] { line-height: normal; + /* stylelint-disable selector-max-compound-selectors */ + /* stylelint-enable */ } -/* line 108, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup]::-webkit-inner-spin-button, .mobile [type='date'][uib-datepicker-popup]::-webkit-clear-button { -webkit-appearance: none; appearance: none; display: none; } -/* line 114, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup]::-webkit-calendar-picker-indicator { background: transparent; bottom: 0; @@ -12181,7 +9916,6 @@ fieldset[disabled] top: 0; width: auto; } -/* line 126, ../../../org.civicrm.shoreditch/scss/angular/overrides/_uib-datepicker.scss */ .mobile [type='date'][uib-datepicker-popup] + .input-group-addon { border-left: 1px solid #C2CFD8 !important; height: 32px !important; diff --git a/hrjobcontract/scss/civihr/partials/_shoreditch-imports.scss b/hrjobcontract/scss/civihr/partials/_shoreditch-imports.scss new file mode 100644 index 00000000000..6cb8835c36e --- /dev/null +++ b/hrjobcontract/scss/civihr/partials/_shoreditch-imports.scss @@ -0,0 +1,8 @@ +@import '../../../org.civicrm.shoreditch/scss/bootstrap/overrides/variables'; +@import '../../../org.civicrm.shoreditch/scss/bootstrap/mixins/prefix'; + +##{$module} { + @import '../../../org.civicrm.shoreditch/scss/angular/overrides/uib-datepicker'; +} + +@import '../../../org.civicrm.shoreditch/scss/angular/overrides/outside-namespace/uib-datepicker-mobile'; diff --git a/hrjobcontract/scss/hrjc.scss b/hrjobcontract/scss/hrjc.scss index 1ad4615cdfb..a765cfcdd33 100644 --- a/hrjobcontract/scss/hrjc.scss +++ b/hrjobcontract/scss/hrjc.scss @@ -5,6 +5,10 @@ @import 'compass/css3/animation'; @import 'compass/css3/transform'; +@import 'bootstrap-compass'; +@import 'civihr/bootstrap-variables'; +@import 'bootstrap/variables'; + ##{$module} { //Unset reset.css @import 'civihr/modules/unset'; @@ -14,11 +18,6 @@ // the narrowed scope of the styles for this CiviCRM module only. // ========================================================================== @import 'bootstrap-sprockets'; - - @import 'bootstrap-compass'; - @import 'civihr/bootstrap-variables'; - - @import 'bootstrap/variables'; @import 'bootstrap/mixins'; // Reset and dependencies @@ -121,8 +120,6 @@ @import 'hrjc/partials/summary'; @import 'hrjc/partials/tables'; @import 'hrjc/partials/wizard'; - - @import '../../../org.civicrm.shoreditch/scss/bootstrap/overrides/variables'; - @import '../../../org.civicrm.shoreditch/scss/bootstrap/mixins/prefix'; - @import '../../../org.civicrm.shoreditch/scss/angular/overrides/uib-datepicker'; } + +@import 'civihr/partials/shoreditch-imports'; From a3a74f0582f848bbc3105639524ec4185fd6e1a9 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 1 Jun 2018 15:13:39 +0100 Subject: [PATCH 209/251] PCHR-3519: Implement the condition for showing the type_id field in the GenericLeave Handler. Add test. Fix broken tests. --- .../Handler/GenericLeaveFieldPermissions.php | 29 ++++++++++ .../GenericLeaveFieldPermissionsTest.php | 56 ++++++++++++++++++- 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php index 02589ff68e8..1bf8421fd2d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissions.php @@ -1,6 +1,7 @@ leaveRequestRightsService = $leaveRequestRights; $this->apiRequest = $apiRequest; $this->setShouldRemoveDataRowIdentifier(); + $this->setVisibleAbsenceTypes(); } /** @@ -113,6 +121,10 @@ protected function getNewFieldValue($field, $oldValue, $dataRowIdentifierValue) return $oldValue; } + if ($field === 'type_id' && in_array($oldValue, $this->visibleAbsenceTypes)) { + return $oldValue; + } + return $this->getRestrictedFields()[$field]['restricted_value']; } @@ -149,4 +161,21 @@ private function setShouldRemoveDataRowIdentifier() { $this->removeDataRowIdentifier = TRUE; } } + + /** + * Sets the value of the visibleAbsenceTypes property + * with absence types that have the hide_label property + * as false. + */ + private function setVisibleAbsenceTypes() { + $activeAbsenceTypes = AbsenceType::getEnabledAbsenceTypes(); + $visibleAbsenceTypes = []; + foreach ($activeAbsenceTypes as $absenceType) { + if (!$absenceType->hide_label) { + $visibleAbsenceTypes[] = $absenceType->id; + } + } + + $this->visibleAbsenceTypes = $visibleAbsenceTypes; + } } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php index d7dcbe5bcb3..d542fe360d3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php @@ -2,6 +2,8 @@ use CRM_HRLeaveAndAbsences_Service_LeaveRequestRights as LeaveRequestRightsService; use CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissions as GenericLeaveFieldPermissions; +use CRM_HRLeaveAndAbsences_Test_Fabricator_AbsenceType as AbsenceTypeFabricator; + /** * Class CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissionsTest * @@ -187,6 +189,9 @@ class CRM_HRLeaveAndAbsences_API_Handler_GenericLeaveFieldPermissionsTest extend ]; public function testProcessWhenUserIsNotAnAdminUser() { + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); $this->setPermissions(); //User has access to two leave contacts. $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); @@ -194,8 +199,11 @@ public function testProcessWhenUserIsNotAnAdminUser() { $apiRequest = []; $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); - $results = $this->sampleData; - $expectedParams = $this->sampleData; + $sampleData = $this->sampleData; + $this->setAbsenceTypeID($sampleData, $absenceType->id); + + $results = $sampleData; + $expectedParams = $sampleData; $expectedParams['values'][1]['from_date_amount'] = ''; $expectedParams['values'][1]['to_date_amount'] = ''; $expectedParams['values'][1]['balance_change'] = ''; @@ -232,6 +240,9 @@ public function testProcessWhenUserIsAdmin() { } public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEvenIfUserHasAccess() { + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); //User is Staff with ID of 204 and has full access to only his data $this->setPermissions(); $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); @@ -240,6 +251,7 @@ public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEven $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); $sampleData = $this->sampleData; + $this->setAbsenceTypeID($sampleData, $absenceType->id); unset($sampleData['values'][0], $sampleData['values'][3], $sampleData['values'][5]); unset($sampleData['values'][1]['contact_id']); unset($sampleData['values'][2]['contact_id']); @@ -268,4 +280,44 @@ public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEven $this->assertEquals($expectedParams, $results); } + + public function testTypeIDFieldIsNotHiddenWhenAbsenceTypeIsPublicAndUserDoesNotHaveAccessToTheLeaveContact() { + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + $this->setPermissions(); + //User has access to two leave contacts. + $leaveRequestRights = $this->prophesize(LeaveRequestRightsService::class); + $leaveRequestRights->getLeaveContactsCurrentUserHasAccessTo()->willReturn([209, 208]); + $apiRequest = []; + $genericFieldHandler = new GenericLeaveFieldPermissions($apiRequest, $leaveRequestRights->reveal()); + + $sampleData = $this->sampleData; + $this->setAbsenceTypeID($sampleData, $absenceType->id); + + $results = $sampleData; + $expectedParams = $sampleData; + + // All other restricted fields are hidden for the user except the type ID field + // because the Absence type allows the label to be public. + $expectedParams['values'][1]['from_date_amount'] = ''; + $expectedParams['values'][1]['to_date_amount'] = ''; + $expectedParams['values'][1]['balance_change'] = ''; + $expectedParams['values'][2]['from_date_amount'] = ''; + $expectedParams['values'][2]['to_date_amount'] = ''; + $expectedParams['values'][2]['balance_change'] = ''; + $expectedParams['values'][4]['sickness_reason'] = ''; + $expectedParams['values'][4]['from_date_amount'] = ''; + $expectedParams['values'][4]['to_date_amount'] = ''; + $expectedParams['values'][4]['balance_change'] = ''; + $genericFieldHandler->process($results); + + $this->assertEquals($expectedParams, $results); + } + + private function setAbsenceTypeID(&$sampleData, $absenceTypeID) { + foreach ($sampleData['values'] as &$data) { + $data['type_id'] = $absenceTypeID; + } + } } From b4a99518d7d619d2b01f2cf0699b3e0af76011ca Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 1 Jun 2018 15:15:01 +0100 Subject: [PATCH 210/251] PCHR-3519: Fix broken API tests. --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index 87a09b99a96..3a31632f46e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -1749,6 +1749,11 @@ public function testGetAndGetFullHidesRestrictedFieldsForUnAssignedContactForLog ['period_start_date' => '2015-10-01'] ); + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + // Set Leave Approvers for staffMembers 1 and 2. // staffMember2 does not have an active leave manager relationship $this->setContactAsLeaveApproverOf($manager1, $staffMember1, null, null, true, 'has Leaves Approved By'); @@ -1756,7 +1761,7 @@ public function testGetAndGetFullHidesRestrictedFieldsForUnAssignedContactForLog $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember1['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-01-01'), 'to_date' => CRM_Utils_Date::processDate('2016-01-01'), 'from_date_type' => 1, @@ -1765,7 +1770,7 @@ public function testGetAndGetFullHidesRestrictedFieldsForUnAssignedContactForLog $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $staffMember2['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-01-05'), 'to_date' => CRM_Utils_Date::processDate('2016-01-05'), 'from_date_type' => 1, @@ -3666,9 +3671,14 @@ public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOther ] ); + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact1['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), 'from_date_type' => 1, @@ -3678,7 +3688,7 @@ public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOther $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact2['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), 'from_date_type' => 1, @@ -3733,9 +3743,14 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog ] ); + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 1 + ]); + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact1['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), 'from_date_type' => 1, @@ -3745,7 +3760,7 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ 'contact_id' => $contact2['id'], - 'type_id' => $this->absenceType->id, + 'type_id' => $absenceType->id, 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), 'from_date_type' => 1, From df2bf239c21c4a02235bdfa61f5b76492b6000c4 Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 1 Jun 2018 15:43:41 +0100 Subject: [PATCH 211/251] PCHR-3519: Add more tests. --- .../tests/phpunit/api/v3/LeaveRequestTest.php | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php index 3a31632f46e..02d94b06898 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/api/v3/LeaveRequestTest.php @@ -3717,6 +3717,76 @@ public function testGetAndGetFullShouldHideRestrictedFieldValuesForContactsOther $this->assertEquals('', $result['values'][1]['balance_change']); } + public function testGetAndGetFullShouldNotHideTypeIDFieldValueForContactsOtherThanLoggedInUserWhenUserIsStaffAndAbsenceTypeLabelIsPublic() { + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($contact1['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + //The type ID field will be visible since the Absence type label is set as public + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + //The logged in contact would be able to see results for the other contact too since the Leave ACL + //allows it and would not be able to view field values for restricted fields but would view the + //type_id field for other users since the Absence type label is public + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + $this->assertNotEmpty($result['values'][0]['balance_change']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + $this->assertEquals('', $result['values'][1]['balance_change']); + } + public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLoggedInUserIsALeaveApprover() { $manager = ContactFabricator::fabricate(); $contact1 = ContactFabricator::fabricate(); @@ -3792,6 +3862,82 @@ public function testGetAndGetFullHidesRestrictedFieldValuesForNonManageesWhenLog $this->assertNotEmpty($result['values'][1]['balance_change']); } + public function testGetAndGetFullShouldNotHideTypeIDFieldValueForNonManageesWhenLoggedInUserIsALeaveApproverAndAbsenceTypeLabelIsPublic() { + $manager = ContactFabricator::fabricate(); + $contact1 = ContactFabricator::fabricate(); + $contact2 = ContactFabricator::fabricate(); + + $this->registerCurrentLoggedInContactInSession($manager['id']); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access AJAX API']; + + $this->setContactAsLeaveApproverOf($manager, $contact2); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact2['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + HRJobContractFabricator::fabricate( + [ 'contact_id' => $contact1['id'] ], + [ + 'period_start_date' => '2016-01-01', + 'period_end_date' => '2016-10-01' + ] + ); + + //The type ID field will be visible if the Absence type label is not hidden. + $absenceType = AbsenceTypeFabricator::fabricate([ + 'hide_label' => 0 + ]); + + $leaveRequest1 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact1['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'to_date' => CRM_Utils_Date::processDate('2016-03-02'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + $leaveRequest2 = LeaveRequestFabricator::fabricateWithoutValidation([ + 'contact_id' => $contact2['id'], + 'type_id' => $absenceType->id, + 'from_date' => CRM_Utils_Date::processDate('2016-02-20'), + 'to_date' => CRM_Utils_Date::processDate('2016-02-23'), + 'from_date_type' => 1, + 'to_date_type' => 1, + 'status_id' => 1, + ], true); + + //Results will be returned for both leave contacts even though contact1 is not being managed by + //the logged in manager but manager will not be able to view restricted field values for the contact + //which he's not a leave approver for but would view the type_id field for other non managees since the + // Absence type label is public + $result = civicrm_api3('LeaveRequest', 'get', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + + $result = civicrm_api3('LeaveRequest', 'getfull', ['check_permissions' => true, 'sequential' => 1]); + $this->assertEquals(2, $result['count']); + + $this->assertEquals($contact1['id'], $result['values'][0]['contact_id']); + $this->assertEquals($leaveRequest1->type_id, $result['values'][0]['type_id']); + $this->assertEquals('', $result['values'][0]['balance_change']); + + $this->assertEquals($contact2['id'], $result['values'][1]['contact_id']); + $this->assertEquals($leaveRequest2->type_id, $result['values'][1]['type_id']); + $this->assertNotEmpty($result['values'][1]['balance_change']); + } + public function testGetAndGetFullShouldNotReturnToilRequestsForContactsOtherThanLoggedInUserWhenUserIsNotALeaveApproverOrAdmin() { $contact1 = ContactFabricator::fabricate(); $contact2 = ContactFabricator::fabricate(); From ec9f5f4e1785beb5d5af77b92151b17962576938 Mon Sep 17 00:00:00 2001 From: Samson Alajede Date: Fri, 1 Jun 2018 15:41:55 +0100 Subject: [PATCH 212/251] PCHR-3742: PR Feedback - code refactoring --- .../js/dist/job-roles.min.js | 4 +- .../controllers/job-roles.controller.js | 52 +++++++++++++------ 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/com.civicrm.hrjobroles/js/dist/job-roles.min.js b/com.civicrm.hrjobroles/js/dist/job-roles.min.js index 08f7837b17c..6cdfbcec3fa 100644 --- a/com.civicrm.hrjobroles/js/dist/job-roles.min.js +++ b/com.civicrm.hrjobroles/js/dist/job-roles.min.js @@ -12,6 +12,6 @@ Build date: 2014-01-10 */ -define("job-roles/modules/job-roles.config",["common/angular"],function(e){"use strict";function t(e,t,n,r,a){t.debugEnabled(a.debug),r.resolveForAll({format:["DateFormat",function(e){return e.getDateFormat()}]}).when("/",{templateUrl:a.pathBaseUrl+a.pathTpl+"mainTemplate.html?v=1",resolve:{},controller:"JobRolesController",controllerAs:"jobroles"}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,e.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("hrjobroles.config",["hrjobroles.constants"]).config(t),t.$inject=["$httpProvider","$logProvider","$resourceProvider","$routeProvider","settings"]}),define("job-roles/modules/job-roles.constants",["common/angular"],function(e){"use strict";e.module("hrjobroles.constants",[]).constant("settings",{classNamePrefix:"hrjobroles-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:CRM.vars.hrjobroles.path,pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.hrjobroles.baseURL+"/",pathTpl:"views/",pathIncludeTpl:"views/include/"})}),define("job-roles/controllers/job-roles.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function r(r,a,o,i,s,l,u,c,d,f,m,p,b,h,v,g,_){function $(e,t){void 0===Ce.editData[e]&&(Ce.editData[e]={}),"cost_centre"===t?(void 0!==Ce.editData[e].cost_centers&&Ce.editData[e].cost_centers instanceof Array||(Ce.editData[e].cost_centers=[]),Ce.editData[e].cost_centers.push({id:Ce.editData[e].cost_centers.length+1,cost_centre_id:"",type:"1",percentage:"0",amount:"0"})):(void 0!==Ce.editData[e].funders&&Ce.editData[e].funders instanceof Array||(Ce.editData[e].funders=[]),Ce.editData[e].funders.push({id:Ce.editData[e].funders.length+1,funder_id:"",type:"1",percentage:"0",amount:"0"}))}function w(){Ce.add_new=!0}function y(){Ce.add_new=!1,delete Ce.editData.new_role_id}function D(e,t){Ce.viewTab[e]=t}function E(t,n){K(t)&&(t=null),K(n)&&(n=null);var r=!0;return!!t&&(e.forEach(Ce.contractsData,function(e){ye(t)===ye(e.start_date)&&ye(n)===ye(e.end_date)&&(r=!1)}),r)}function j(){return void 0===Ce.editData.new_role_id||void 0===Ce.editData.new_role_id.title||""===Ce.editData.new_role_id.title||void 0===Ce.editData.new_role_id.job_contract_id||""===Ce.editData.new_role_id.job_contract_id}function C(e){Ce.collapsedRows[e]=!Ce.collapsedRows[e]}function R(e){return g.getContracts(e).then(function(e){for(var t=[],n={},r=0;r-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function $e(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!_e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function we(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var ye=r("formatDate"),De={},Ee=r("getActiveValues"),je=["funders","cost_centers"],Ce=this;Ce.contactId=m.contactId,Ce.format=p.DATE_FORMAT,Ce.loading=!0,Ce.pastJobRoles=[],Ce.presentJobRoles=[],Ce.collapsedRows=[],Ce.contactList=[],Ce.editData={},Ce.viewTab=[],Ce.CalendarShow=[],Ce.contractsData=[],Ce.DepartmentsData={},Ce.LevelsData={},Ce.LocationsData={},Ce.RegionsData={},Ce.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Ce.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Ce.rowTypes={},Ce.rowTypes[0]={id:0,name:"Fixed"},Ce.rowTypes[1]={id:1,name:"%"},Ce.addAdditionalRow=$,Ce.addNewRole=w,Ce.cancelNewRole=y,Ce.changeTab=D,Ce.checkIfDatesAreCustom=E,Ce.checkNewRole=j,Ce.collapseRow=C,Ce.deleteAdditionalRow=x,Ce.dpOpen=S,Ce.getContactList=J,Ce.getCostLabel=U,Ce.initData=P,Ce.isChanged=G,Ce.isOpen=Z,Ce.isRowCollapsed=X,Ce.isTab=Q,Ce.onAfterSave=ee,Ce.onCancel=te,Ce.onContractEdited=ne,Ce.onContractSelected=re,Ce.open=ae,Ce.removeRole=ie,Ce.saveNewRole=se,Ce.select=le,Ce.showRowType=ue,Ce.showSave=ce,Ce.status="",Ce.today=fe,Ce.updateAdditionalRowType=me,Ce.updateRole=ve,Ce.validateRole=$e,Ce.validateTitle=we,Ce.openOptionsEditor=q,function(){de(),Ce.today(),o.all([W(),I(Ce.contactId),Ce.getContactList()]).then(function(){Ce.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'', -controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function we(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!$e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function ye(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var De=r("formatDate"),Ee={},je=r("getActiveValues"),Ce=["funders","cost_centers"],Re=this;Re.contactId=m.contactId,Re.format=p.DATE_FORMAT,Re.loading=!0,Re.pastJobRoles=[],Re.presentJobRoles=[],Re.collapsedRows=[],Re.contactList=[],Re.editData={},Re.viewTab=[],Re.CalendarShow=[],Re.contractsData=[],Re.DepartmentsData={},Re.LevelsData={},Re.LocationsData={},Re.RegionsData={},Re.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Re.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Re.rowTypes={},Re.rowTypes[0]={id:0,name:"Fixed"},Re.rowTypes[1]={id:1,name:"%"},Re.addAdditionalRow=$,Re.addNewRole=w,Re.cancelNewRole=y,Re.changeTab=D,Re.checkIfDatesAreCustom=E,Re.checkNewRole=j,Re.collapseRow=C,Re.deleteAdditionalRow=x,Re.dpOpen=S,Re.getContactList=J,Re.getCostLabel=U,Re.initData=P,Re.isChanged=G,Re.isOpen=Z,Re.isRowCollapsed=X,Re.isTab=Q,Re.onAfterSave=ee,Re.onCancel=te,Re.onContractEdited=ne,Re.onContractSelected=re,Re.open=ae,Re.removeRole=ie,Re.saveNewRole=se,Re.select=le,Re.showRowType=ue,Re.showSave=ce,Re.status="",Re.today=fe,Re.updateAdditionalRowType=me,Re.updateRole=ve,Re.validateRole=we,Re.validateTitle=ye,Re.openOptionsEditor=q,function(){de(),Re.today(),o.all([W(),I(Re.contactId),Re.getContactList()]).then(function(){Re.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"", +errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c Date: Fri, 1 Jun 2018 17:01:45 +0100 Subject: [PATCH 213/251] PCHR-3771: Fix months pagination --- .../js/angular/dist/absence-tab.min.js | 2 +- .../js/angular/dist/admin-dashboard.min.js | 2 +- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../components/leave-calendar.component.js | 3 ++- .../leave-calendar.component.spec.js | 21 ++++++++++++------- 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 8930e12ea97..918922b1125 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,4 +1,4 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var n="previous"===e?"subtract":"add";$(N.selectedMonth.moment[n](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var t="previous"===e?"subtract":"add";$(n(N.selectedMonth.moment)[t](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,t={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:k()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:n?H:e.pluck(X.supportData.absenceTypes,"id")}};return i.all(t,null,null,null,!1).then(function(e){return z={},n&&(e.list=_(e.list)),C(e.list)})}function S(){var n=X.month.days[0].date,t=X.month.days[X.month.days.length-1].date;return s.get(X.contacts.map(function(e){return e.id}),n,t).then(function(n){V=e.indexBy(n,"contact_id")})}function M(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(n){return e.includes(X.contactIdsToReduceTo,n.contact_id)||e.find(z,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function x(n){var t=I(n);z[n.contact_id]=z[n.contact_id]||{},t.forEach(function(t){e.remove(z[n.contact_id][t.date],function(e){return e.id===n.id})})}function $(){o.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function E(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return z[t]&&z[t][n.date]?z[t][n.date]:[]}).then(function(a){a=U(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(n,a)})})}function B(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(n){return E(e,n.id)}))}))}function F(e,n){X.currentPage=0,X.visible=!0,(n||!Y)&&O()}function U(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(n){var t=e.find(X.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function j(e){h(e),-1!==k().indexOf(e.status_id)&&u(e)}function W(e){return a.all(I(e).map(function(n){return E(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var H=[],Y=!1,G=[],V={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=$,X.contactsList=f,X.getContactUrl=g,function(){var e=n().month(X.month.month).year(X.month.year);q(),T(),X.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={ delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements") ;var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index a4a8881ab32..b3f7097f7e1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";L(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function E(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=L,X.contactsList=m,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired], +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";L(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function E(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=L,X.contactsList=m,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired], dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0}, Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 9f601b6b8da..ac0062ab845 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var t="previous"===e?"subtract":"add";E(N.selectedMonth.moment[t](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=E,X.contactsList=m,X.getContactUrl=b,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";E(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=E,X.contactsList=m,X.getContactUrl=b,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl") ;var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index f0eee90a7fb..788116497e5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[P]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function P(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=P(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var t="previous"===e?"subtract":"add";M(N.selectedMonth.moment[t](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride +;return!0===t?0===f(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var n="previous"===e?"subtract":"add";M(t(N.selectedMonth.moment)[n](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride }):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),q(e.list)})}function O(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&I()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function H(e){return a.all(P(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=M,X.contactsList=f,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);$(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id} ;return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||P())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){ define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index e8988561182..8cdfd9db196 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -333,7 +333,8 @@ define([ */ function paginateMonth (direction) { var monthAction = direction === 'previous' ? 'subtract' : 'add'; - var dateFromMonth = vm.selectedMonth.moment[monthAction](1, 'month'); + // moment() is used again to ensure we do not mutate the object + var dateFromMonth = moment(vm.selectedMonth.moment)[monthAction](1, 'month'); setSelectedMonth(dateFromMonth); setMonthPaginatorsAvailability(); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index bc6053b1999..c56652ba1ca 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -627,8 +627,10 @@ describe('paginateMonth()', function () { var currentlySelectedMonth; var tests = [ - { direction: 'previous', monthDifference: -1 }, - { direction: 'next', monthDifference: 1 } + { directions: 'previous', monthDifference: -1 }, + { directions: 'next', monthDifference: 1 }, + { directions: 'previous next previous next next', monthDifference: 1 }, + { directions: 'next previous next previous previous', monthDifference: -1 } ]; beforeEach(function () { @@ -638,22 +640,27 @@ }); tests.forEach(function (test) { - describe('when user paginates to the ' + test.direction + ' month', function () { + describe('when user paginates to the ' + test.directions + ' month', function () { + var directions; + beforeEach(function () { + directions = test.directions.split(' '); controller.injectMonth = false; - controller.paginateMonth(test.direction); + directions.forEach(function (direction) { + controller.paginateMonth(direction); + }); $rootScope.$digest(); simulateMonthWithSignal('injected', controller.months.length); $rootScope.$digest(); }); - it('sets the selected month as a ' + test.direction + ' month', function () { + it('sets the selected month according to ' + test.directions + ' directions', function () { expect(controller.selectedMonth.moment .diff(currentlySelectedMonth.moment, 'month')).toBe(test.monthDifference); }); - it('does not allow to paginate further because the are no more months in that direction', function () { - expect(controller.monthPaginatorsAvailability[test.direction]).toBe(false); + it('does not allow to paginate further because the are no more months in the last mentioned direction', function () { + expect(controller.monthPaginatorsAvailability[_.last(directions)]).toBe(false); }); it('refreshes the month component without force data reload', function () { From 4f5ed981903027d1af64e6f32f36e319aaa7468c Mon Sep 17 00:00:00 2001 From: Tunbola Ogunwande Date: Fri, 1 Jun 2018 18:02:25 +0100 Subject: [PATCH 214/251] PCHR-3519: Change Absence Type label to public in test. --- .../API/Handler/GenericLeaveFieldPermissionsTest.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php index d542fe360d3..f488acec0e3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/tests/phpunit/CRM/HRLeaveAndAbsences/API/Handler/GenericLeaveFieldPermissionsTest.php @@ -241,7 +241,7 @@ public function testProcessWhenUserIsAdmin() { public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEvenIfUserHasAccess() { $absenceType = AbsenceTypeFabricator::fabricate([ - 'hide_label' => 1 + 'hide_label' => 0 ]); //User is Staff with ID of 204 and has full access to only his data $this->setPermissions(); @@ -262,19 +262,18 @@ public function testProcessWillHideAccessibleFieldsWhenRowIdentifierIsAbsentEven //Staff will not be able to access all restricted fields for his //records since the row identifier is absent + //The type_id field is not expected to be restricted to the user since the + //Absence type label is public which makes it accessible to user $expectedParams['values'][1]['from_date_amount'] = ''; $expectedParams['values'][1]['to_date_amount'] = ''; $expectedParams['values'][1]['balance_change'] = ''; - $expectedParams['values'][1]['type_id'] = ''; $expectedParams['values'][2]['from_date_amount'] = ''; $expectedParams['values'][2]['to_date_amount'] = ''; $expectedParams['values'][2]['balance_change'] = ''; - $expectedParams['values'][2]['type_id'] = ''; $expectedParams['values'][4]['sickness_reason'] = ''; $expectedParams['values'][4]['from_date_amount'] = ''; $expectedParams['values'][4]['to_date_amount'] = ''; $expectedParams['values'][4]['balance_change'] = ''; - $expectedParams['values'][4]['type_id'] = ''; $genericFieldHandler->process($results); From b22d27be460bd124d542c30f78d4344d6d8b7684 Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Fri, 1 Jun 2018 18:20:51 +0100 Subject: [PATCH 215/251] PCHR-3772: Do not cache leave requests --- contactsummary/js/dist/contact-summary.min.js | 2 +- .../js/angular/dist/absence-tab.min.js | 4 ++-- .../js/angular/dist/admin-dashboard.min.js | 4 ++-- .../js/angular/dist/manager-leave.min.js | 2 +- .../js/angular/dist/manager-notification-badge.min.js | 2 +- .../js/angular/dist/my-leave.min.js | 2 +- .../src/leave-absences/shared/apis/leave-request.api.js | 2 +- .../js/angular/test/shared/apis/leave-request.api.spec.js | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/contactsummary/js/dist/contact-summary.min.js b/contactsummary/js/dist/contact-summary.min.js index 1943db63489..18f1e921d40 100644 --- a/contactsummary/js/dist/contact-summary.min.js +++ b/contactsummary/js/dist/contact-summary.min.js @@ -1,3 +1,3 @@ -define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return n.contact_id&&n.period_id||s.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){ +define("contact-summary/modules/contact-summary.config",["common/angular"],function(e){"use strict";function t(e,t,n,a,s){s.debugEnabled(e.debug),t.when("/",{controller:"ContactSummaryController",controllerAs:"ContactSummaryCtrl",templateUrl:e.pathBaseUrl+e.pathTpl+"mainTemplate.html",resolve:{}}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("contactsummary.config",["contactsummary.constants"]).config(t),t.$inject=["settings","$routeProvider","$resourceProvider","$httpProvider","$logProvider"]}),define("contact-summary/modules/contact-summary.constants",["common/angular"],function(e){"use strict";e.module("contactsummary.constants",[]).constant("settings",{classNamePrefix:"contactSummary-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:"",pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.contactsummary.baseURL+"/",pathTpl:"views/",CRM:{options:CRM.FieldOptions||{}}})}),define("contact-summary/controllers/contact-summary.controller",[],function(){"use strict";function e(e,t){e.debug("Controller: ContactSummaryController");var n=t.pathBaseUrl+t.pathTpl,a=this;a.contactId=t.contactId,a.ready=!1,a.partials={keyDetails:n+"/include/keyDetails.html",keyDates:n+"/include/keyDates.html"}}return e.__name="ContactSummaryController",e.$inject=["$log","settings"],e}),define("contact-summary/controllers/key-dates.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,s,r,o){function i(e){m.dates.push({title:e.title+" (Start)",date:e.start_date,future:u(e.start_date)}),e.end_date&&m.dates.push({title:e.title+" (End)",date:e.end_date,future:u(e.end_date)})}function c(){l(),s.get().then(function(n){return t.isEmpty(n)||e.forEach(n,function(e){i(e),"1"===e.is_current&&m.activeContracts++}),r.get()}).then(function(t){e.forEach(t,function(e){var t=n(e.end_date);(void 0===e.end_date||t.isValid()&&u(t))&&m.activeRoles++})}).finally(function(){m.ready=!0})}function u(e){return n().diff(e,"days")<=0}function l(){m.activeContracts=0,m.activeRoles=0,m.dates=[]}function d(){a.debug("Subcsribers initialiazed!"),["Contract::created","Contract::updated","JobRole::created","JobRole::updated","JobRole::deleted"].forEach(function(e){o.subscribe(e,c)}),o.subscribe("Contract::deleted",function(e){s.removeContract(e),c()})}a.debug("Controller: KeyDatesController");var m=this;m.dates=[],m.activeContracts=0,m.activeRoles=0,m.ready=!1,function(){c(),d()}()}return a.__name="KeyDatesController",a.$inject=["$log","contractService","jobRoleService","pubSub"],a}),define("contact-summary/controllers/key-details.controller",["common/lodash","common/moment"],function(e,t){"use strict";function n(t,n,a,s){function r(){n.get().then(function(e){return u.contactDetails=e,a.getCurrent()}).then(function(t){if(e.isEmpty(t))return void(u.primaryContract=null);u.primaryContract=t}).then(function(e){return a.getLengthOfService()}).then(function(e){u.lengthOfService=e}).finally(function(){u.ready=!0})}function o(){u.options=a.getOptions()}function i(){s.subscribe("Contract::deleted",c)}function c(){a.resetContracts(),n.data.item={},r()}t.debug("Controller: KeyDetailsController");var u=this;u.ready=!1,u.options={},function(){o(),r(),i()}()}return n.__name="KeyDetailsController",n.$inject=["$log","contactDetailsService","contractService","pubSub"],n}),define("contact-summary/modules/contact-summary.controllers",["common/angular","contact-summary/controllers/contact-summary.controller","contact-summary/controllers/key-dates.controller","contact-summary/controllers/key-details.controller"],function(e,t,n,a){"use strict";e.module("contactsummary.controllers",[]).controller(t.__name,t).controller(n.__name,n).controller(a.__name,a)}),define("contact-summary/modules/contact-summary.core",["common/angular","common/services/pub-sub"],function(e){"use strict";e.module("contactsummary.core",["ngRoute","ngResource","ui.bootstrap","common.services"])}),define("contact-summary/directives/donut-chart.directive",["common/angular","common/d3"],function(e,t){"use strict";function n(e){this.height=this.width=e[0].clientWidth,this.radius=this.width/2||60,this.thickness=this.thickness||15}function a(){return t.svg.arc().innerRadius(this.radius-this.thickness).outerRadius(this.radius)}function s(e,n,a){var s=t.scale.category20();return e.selectAll("path").data(a).enter().append("path").attr("fill",function(e,t){return s(t)}).attr("class",function(e,t){return"chart-color-"+t}).attr("d",n)}function r(){return t.layout.pie().sort(null).value(function(e){return e.value[this.itemKey]}.bind(this))(t.entries(this.items))}function o(e){return t.select(e).append("svg").attr("width",this.width).attr("height",this.height).append("g").attr("transform","translate("+this.width/2+","+this.height/2+")")}function i(t){return t.debug("Directive: csDonutChart"),{controllerAs:"CsDonutChartCtrl",restrict:"AE",scope:{radius:"@",thickness:"@",items:"=",itemKey:"@",ready:"="},controller:["$scope","$element",function(t,i){this.drawChart=function(){n.call(e.extend(this,t),i),s(o.call(this,i[0]),a.call(this),r.call(this))}}],link:function(e,t,n,a){var s=e.$watch(function(){return e.ready},function(e,t){!0===e&&(a.drawChart(),s())})}}}return i.__name="csDonutChart",i.$inject=["$log"],i}),define("contact-summary/modules/contact-summary.directives",["common/angular","contact-summary/directives/donut-chart.directive"],function(e,t){"use strict";e.module("contactsummary.directives",[]).directive(t.__name,t)}),define("contact-summary/modules/contact-summary.run",["common/angular"],function(e){"use strict";function t(e,t,n,a){a.debug("app.run"),t.pathTpl=e.pathTpl,t.prefix=e.classNamePrefix}e.module("contactsummary.run",["contactsummary.constants"]).run(t),t.$inject=["settings","$rootScope","$q","$log"]}),function(e){define("contact-summary/services/api.service",["common/angular"],function(t){"use strict";function n(n,a){function s(n,a,s,r){if(!t.isDefined(n))throw new Error("Entity name not provided");if(!t.isDefined(s))throw new Error("Action not provided");return a=t.extend({entity:n,action:s,sequential:1,json:1,rowCount:0},a),r?e.param(a):a}function r(e,t,n){return i("get",s(e,t,"get"),n)}function o(e,n,a,r){return r=t.extend({headers:{"Content-Type":"application/x-www-form-urlencoded"}},r),i("post",s(e,n,a,!0),r)}function i(e,s,r){return r=t.extend({method:e,url:"/civicrm/ajax/rest"},"post"===e?{data:s}:{params:s},r),n(r).then(function(e){return e.is_error?a.reject(e):e.data}).catch(function(e){return e})}return{get:r,post:o}}return n.__name="apiService",n.$inject=["$http","$q"],n})}(CRM.$),define("contact-summary/services/contact-details.service",["common/lodash","common/moment"],function(e,t){"use strict";function n(n,a,s,r,o){function i(){var e=n.defer();return u().then(function(){e.resolve(l.getData())}),e.promise}function c(e){return t().diff(t(e,"YYYY-MM-DD"),"years")}function u(){var a=n.defer();if(e.isEmpty(l.getData())){var r=o.contactId;s.get("Contact",{contact_id:r,return:"birth_date"}).then(function(e){if(0===e.values.length)throw new Error("Contact with ID "+r+" not found");var n=e.values[0].birth_date,s=t(n,"YYYY-MM-DD").isValid()?c(n):"";l.setDataKey("id",r),l.setDataKey("dateOfBirth",n),l.setDataKey("age",s),a.resolve()}).catch(function(e){a.reject(e)})}else a.resolve();return a.promise}a.debug("Service: contactDetailsService");var l=r.createInstance();return l.get=i,l}return n.__name="contactDetailsService",n.$inject=["$q","$log","apiService","modelService","settings"],n}),define("contact-summary/services/contact.service",["common/lodash"],function(e){"use strict";function t(t,n,a,s,r){function o(){return i().then(function(){return l.getData()})}function i(){var t=n.defer();return e.isEmpty(l.getData())?c().then(u).then(function(){t.resolve()}):t.resolve(),t.promise}function c(){return s.get().then(function(e){l.setDataKey("id",e.id),l.setDataKey("dateOfBirth",e.dateOfBirth),l.setDataKey("age",e.age)})}function u(){return r.get().then(function(e){l.setDataKey("contract",e)})}t.debug("Service: contactService");var l=a.createInstance();return l.get=o,l}return t.__name="contactService",t.$inject=["$log","$q","modelService","contactDetailsService","contractService"],t}),define("contact-summary/services/contract.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(n,s,r,o,i,c){function u(){return c.get().then(function(e){var t={contact_id:e.id,"api.HRJobContractRevision.getcurrentrevision":{jobcontract_id:"$value.id"}};return o.get("HRJobContract",t)})}function l(e){return e.values.filter(function(e){return 0===parseInt(e.deleted)})}function d(){var t=[];return e.forEach(q,function(e){var n=A.getContractDetails(e.id).then(function(t){var n=e.api_HRJobContractRevision_getcurrentrevision;return{id:e.id,is_primary:e.is_primary,is_current:e.is_current,revision_id:n?n.values.id:null,title:t.title,start_date:t.period_start_date,end_date:t.period_end_date,type:t.contract_type,pay:t.pay,hours:t.hours}}).then(function(t){A.collection.insertItem(e.id,t)});t.push(n)}),n.all(t).catch(function(e){s.error("Something went wrong",e)})}function m(){return y().then(function(){return A.getCollection()})}function f(){return A.collection.get()}function v(){return t.isEmpty(q)?u().then(function(e){return q=l(e)}):n.resolve(q)}function h(e){var t=function(e){var t=e.api_HRJobPay_get.values,n={};0!==t.length&&(n.amount=t[0].pay_amount,n.currency=t[0].pay_currency),e.pay=n},s=function(e){var t=e.api_HRJobHour_get.values,n={};0!==t.length&&(n.amount=t[0].hours_amount,n.unit=t[0].hours_unit),e.hours=n},r="getContractDetails_"+e,i={jobcontract_id:e,"api.HRJobPay.get":{jobcontract_id:e},"api.HRJobHour.get":{jobcontract_id:e}};return a[r]||(a[r]=o.post("HRJobDetails",i,"get").then(function(a){if(0===a.values.length)return n.reject("No details found for contract revision with ID "+e);var r=a.values[0];return t(r),s(r),r})),a[r]}function p(){var e=n.defer();return c.get().then(function(e){return o.post("HRJobContract",{sequential:0,contact_id:e.id},"getlengthofserviceymd")}).then(function(t){t.is_error?e.reject(t):e.resolve(t.values)}).catch(function(t){e.reject(t)}),e.promise}function g(e){var t=r.CRM.options.HRJobDetails||{};return"string"==typeof e&&(t=t[e]),{details:t}}function b(){return A.get().then(function(e){var n=t.sortBy(e,function(e){return[e.is_current]});return t.last(n)||{}})}function y(){return A.getContracts().then(d)}function _(){A.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items},remove:function(e){delete this.items[e]}}}function R(){q=[],a={},_()}function C(e){t.remove(q,{id:e.contractId}),A.collection.remove(e.contractId)}s.debug("Service: Contract Service");var q=[],A={};return A.get=m,A.getCollection=f,A.getContracts=v,A.removeContract=C,A.getContractDetails=h,A.getLengthOfService=p,A.getOptions=g,A.getCurrent=b,A.resetContracts=R,_(),A}var a={};return n.__name="contractService",n.$inject=["$q","$log","settings","apiService","modelService","contactDetailsService"],n}),define("contact-summary/services/item.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(){function t(){var e=Object.create(r);return e.item={},e}function n(){return this.item}function a(t){if(!e.isObject(t))throw new TypeError("Data must be of type Object");this.item=t}function s(e,t){this.item[e]=t}var r={};return r.createInstance=t,r.get=n,r.set=a,r.setKey=s,r}return a.__name="itemService",a}),define("contact-summary/services/job-role.service",["common/angular","common/lodash"],function(e,t){"use strict";function n(t,n,a,s,r){function o(){return c().then(function(){return u.getCollection()})}function i(){return u.collection.get()}function c(){var n=t.defer();return r.get().then(function(s){var r=[];if(e.forEach(s,function(e){r.push(e.id)}),0===r.length)return t.reject("No job roles found for contracts");a.post("HrJobRoles",{job_contract_id:{IN:r}},"get").then(function(e){var t=e.values.map(function(e){return{id:e.id,title:e.title,department:e.department,status:e.status,start_date:e.start_date,end_date:e.end_date}});u.collection.set(t)}).finally(function(){n.resolve()})}),n.promise}n.debug("Service: jobRoleService");var u={};return u.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},u.get=o,u.getCollection=i,u}return n.__name="jobRoleService",n.$inject=["$q","$log","apiService","modelService","contractService"],n}),define("contact-summary/services/leave.service",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function a(a,r,o,i,c,u){function l(t){var n=S.collection.getItem(t)||{};e.forEach(D,function(e){if("1"===e.is_active){var t=e.id;n.hasOwnProperty(t)||(n[t]={}),n[t].type_id=t,n[t].title=e.title,n[t].credit_activity_type_id=e.credit_activity_type_id?e.credit_activity_type_id:null,n[t].debit_activity_type_id=e.debit_activity_type_id?e.debit_activity_type_id:null,n[t].entitled=0,n[t].taken=0}}),S.collection.insertItem(t,n)}function d(t){var n=S.collection.getItem(t),a={};e.forEach(D,function(e){e.credit_activity_type_id&&(a[e.credit_activity_type_id]=e.id),e.debit_activity_type_id&&(a[e.debit_activity_type_id]=e.id)}),e.forEach(P,function(e){var t;if(a.hasOwnProperty(e.activity_type_id)&&(t=a[e.activity_type_id]),t){if(!n.hasOwnProperty(t))return;var s=Math.ceil(e.absence_range.approved_duration/60),r=+(s/8).toFixed(1);"toil"===n[t].title.toLowerCase()&&e.activity_type_id===n[t].credit_activity_type_id?n[t].entitled+=r:n[t].taken+=r}}),S.collection.insertItem(t,n)}function m(t){var n=S.collection.getItem(t);e.forEach(L,function(e){var t=e.type_id;n.hasOwnProperty(t)&&"toil"!==n[t].title.toLowerCase()&&(n[t].entitled=+e.amount)}),S.collection.insertItem(t,n)}function f(e){l(e),m(e),d(e)}function v(){return w(void 0).then(function(){return S.getData()})}function h(){var e=a.defer();return t.isEmpty(D)?i.get("HRAbsenceType").then(function(t){if(0===t.values.length)throw new Error("No absence type not found");D=t.values,e.resolve(D)}):e.resolve(D),e.promise}function p(e){var n=a.defer();return u.get().then(function(t){var n={target_contact_id:t.id,period_id:[e],options:{"absence-range":1},sequential:0};return i.post("Activity",n,"getabsences")}).then(function(e){P=t.filter(e.values,function(e){return"2"===e.status_id}),n.resolve(P)}),n.promise}function g(){return S.collection.get()}function b(){var e,t=a.defer();return s.getCurrent||(S.getCurrentPeriod().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),s.getCurrent=t.promise),s.getCurrent}function y(){return C().then(function(e){for(var t={},a=n(),s=0;s=0&&a.diff(o)<=0&&(t=e[s])}return t})}function _(){}function R(e){var t=a.defer();return u.get().then(function(t){var n={contact_id:t.id,period_id:e,options:{"absence-range":1}};return i.get("HRAbsenceEntitlement",n)}).then(function(e){L=e.values,t.resolve(L)}),t.promise}function C(){var e=a.defer();return t.isEmpty(T)?i.get("HRAbsencePeriod").then(function(t){if(0===t.values.length)return e.reject("No absence periods found");T=t.values,T=o("orderBy")(T,"start_date"),e.resolve(T)}).catch(function(t){r.debug("An error has occurred",t),e.reject(t)}):e.resolve(T),e.promise}function q(){var e,t=a.defer();return A().then(function(n){n.hasOwnProperty("id")?(e=n.id,w(e).then(function(){t.resolve(S.collection.getItem(e))})):t.resolve({})}),t.promise}function A(){var e,t={};return S.getCurrentPeriod().then(function(t){return e=t,C()}).then(function(n){var a=n.indexOf(e);return-1!==a&&a>0&&(t=n[a-1]),t})}function I(e){var t=a.defer();return S.getCurrentPeriod().then(function(n){if(n.hasOwnProperty("id")){var s=n.id;i.post("ContactSummary",{absence_types:e,period_id:s},"getabsenceaggregate").then(function(e){if(0===e.values.length)return a.reject("Staff average not returned");var n=Math.ceil(e.values[0].result/60),s=+(n/8).toFixed(1);t.resolve(s)})}else t.resolve(0)}),t.promise}function w(e){var n=a.defer();return t.isEmpty(S.collection.getItem(e))?S.getAbsenceTypes().then(function(){return S.getAbsences(e)}).then(function(){return S.getEntitlement(e)}).then(function(){return f(e)}).then(function(){n.resolve()}).catch(function(e){r.debug("An error has occurred",e),n.reject(e)}):n.resolve(),n.promise}r.debug("Service: leaveService");var P,L,T,D=[],S={};return S.collection={items:{},insertItem:function(e,t){this.items[e]=t},getItem:function(e){return this.items[e]},set:function(e){this.items=e},get:function(){return this.items}},S.get=v,S.getAbsenceTypes=h,S.getAbsences=p,S.getCollection=g,S.getCurrent=b,S.getCurrentPeriod=y,S.getDepartmentAverage=_,S.getEntitlement=R,S.getPrevious=q,S.getStaffAverage=I,S}var s={};return a.__name="leaveService",a.$inject=["$q","$log","$filter","apiService","modelService","contactDetailsService"],a}),define("contact-summary/services/model.service",["common/lodash","contact-summary/modules/contact-summary.services"],function(e,t){"use strict";function n(e){function t(){var t=Object.create(r);return t.data=e.createInstance(),t}function n(){return this.data.get()}function a(e){this.data.set(e)}function s(e,t){this.data.setKey(e,t)}var r={};return r.data={},r.createInstance=t,r.getData=n,r.setData=a,r.setDataKey=s,r}return n.__name="modelService",n.$inject=["itemService"],n}),define("contact-summary/modules/contact-summary.services",["common/angular","contact-summary/services/api.service","contact-summary/services/contact-details.service","contact-summary/services/contact.service","contact-summary/services/contract.service","contact-summary/services/item.service","contact-summary/services/job-role.service","contact-summary/services/leave.service","contact-summary/services/model.service"],function(e,t,n,a,s,r,o,i,c){"use strict";e.module("contactsummary.services",[]).factory(t.__name,t).factory(n.__name,n).factory(a.__name,a).factory(s.__name,s).factory(r.__name,r).factory(o.__name,o).factory(i.__name,i).factory(c.__name,c)}),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(t){return t.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),s=t(e,n);return t(this.start_date).isSameOrBefore(s)&&t(this.end_date).isSameOrAfter(s)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,s,r){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},current:function(){var e=t().format(r.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?s.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,s){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,r,o){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:t(r).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,s,r,o){return t.debug("AbsenceType"),a.extend({all:function(e){return r.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return r.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return r.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/components/leave-requests-heatmap.component",["common/moment","common/components/heatmap.component","leave-absences/shared/modules/components"],function(e,t,n){function a(){function t(e){e.leaveRequests&&n()}function n(){s.heatmapValues={},a().forEach(function(t){var n=e(t.date).isoWeekday();s.heatmapValues[n]||(s.heatmapValues[n]=0),s.heatmapValues[n]++})}function a(){return s.leaveRequests.reduce(function(e,t){return e.concat(t.dates)},[])}var s=this;s.heatmapValues={},s.$onChanges=t}n.component("leaveRequestsHeatmap",{bindings:{leaveRequests:"<"},controller:a,controllerAs:"LeaveRequestsHeatmap",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-requests-heatmap.html"}]})}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,s,r,o){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,s,r,"getFull",o)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return n.contact_id&&n.period_id||s.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?s.reject(t(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,s,r,o,i,c){function u(e){return v(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return v(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function v(t){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),s=a.breakdown.length>1,r=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(r.date),s&&this.getWorkDayForDate(o.date)]).then(function(t){return r.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,s&&(o.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function p(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,r.statusNames.cancelled)},approve:function(){return u.call(this,r.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,r.statusNames.rejected)},sendBack:function(){return u.call(this,r.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([p.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){ return this.id=e.id,n.all([p.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,r.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,r.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,r.statusNames.cancelled)},isRejected:function(){return d.call(this,r.statusNames.rejected)},isSentBack:function(){return d.call(this,r.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(r.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,s,r,o){return n.all(this.processFilters(e),t,s,r,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/components/leave-requests-heatmap.component","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(t,n,a){function s(){r()&&o().finally(function(){t.$emit("LeaveWidget::childIsReady",l)})}function r(){return d.absenceTypes&&d.absenceTypes.length&&d.contactId&&d.absencePeriod&&d.leaveRequestStatuses&&d.leaveRequestStatuses.length}function o(){var e=i(),t=c();return n.all({contact_id:d.contactId,from_date:{">=":d.absencePeriod.start_date},to_date:{"<=":d.absencePeriod.end_date},status_id:{IN:t},type_id:{IN:e}},null,null,null,!1).then(function(e){d.leaveRequests=e.list}).then(u)}function i(){return d.absenceTypes.map(function(e){return e.id})}function c(){return d.leaveRequestStatuses.map(function(e){return e.value})}function u(){d.absenceTypes=d.absenceTypes.map(function(t){var n;return n=d.leaveRequests.filter(function(e){return+e.type_id==+t.id}).reduce(function(e,t){return e+t.balance_change},0),e.assign({balance:Math.abs(n)},t)})}var l="leave-widget-absence-types-amount-taken",d=this;d.leaveRequests=[],d.$onChanges=s,function(){t.$emit("LeaveWidget::childIsLoading",l)}()}n.component("leaveWidgetAbsenceTypesAmountTaken",{bindings:{title:"@",leaveName:"@?",absenceTypes:"<",contactId:"<",absencePeriod:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"absenceTypesTaken",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-amount-taken.html"}]}),a.$inject=["$scope","LeaveRequest","OptionGroup"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function s(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(s),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,s,r){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,s,"getLeaveBalances",r)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,s,r){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return s.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return s.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),r.all(t)}})}])}),define("leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component",["common/lodash","leave-absences/shared/modules/components","leave-absences/shared/models/entitlement.model"],function(e,t){function n(t,n){function a(){s()&&o().then(function(t){return e.indexBy(t,"type_id")}).then(i).then(r).then(function(e){u.absenceTypes=e}).then(function(){t.$emit("LeaveWidget::childIsReady",c)})}function s(){return u.absenceTypes&&u.absencePeriod&&u.contactId}function r(e){return e.filter(function(e){var t=e.entitlement&&e.entitlement.value>0,n="1"===e.allow_overuse,a="1"===e.allow_accruals_request;return t||n||a})}function o(){return n.all({contact_id:u.contactId,period_id:u.absencePeriod.id,"type_id.is_active":!0},!0)}function i(t){return u.absenceTypes.map(function(n){return e.assign({entitlement:t[n.id]},n)})}var c="leave-widget-absence-types-available-balance",u=this;u.$onChanges=a,function(){t.$emit("LeaveWidget::childIsLoading",c)}()}t.component("leaveWidgetAbsenceTypesAvailableBalance",{bindings:{absencePeriod:"<",absenceTypes:"<",contactId:"<"},controller:n,controllerAs:"leaveWidgetBalance",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-absence-types-available-balance.html"}]}),n.$inject=["$scope","Entitlement"]}),define("leave-absences/shared/components/leave-widget/leave-widget-next-leave.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/models/leave-request.model"],function(e,t,n){function a(n,a,s,r,o){function i(){c()&&n.all([m(),f()]).then(function(){b.nextLeaveRequest&&(u(),h(),v(),p())}).finally(function(){a.$emit("LeaveWidget::childIsReady",g)})}function c(){return b.absenceTypes&&b.absenceTypes.length&&b.contactId&&b.leaveRequestStatuses&&b.leaveRequestStatuses.length}function u(){b.nextLeaveRequest.from_date=b.nextLeaveRequest.from_date&&t(b.nextLeaveRequest.from_date),b.nextLeaveRequest.to_date=b.nextLeaveRequest.to_date&&t(b.nextLeaveRequest.to_date)}function l(){return e.pluck(b.absenceTypes,"id")}function d(){return e.pluck(b.leaveRequestStatuses,"value")}function m(){return r.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(t){b.dayTypes=e.indexBy(t,"value")})}function f(){var e=t().format(o.serverDateFormat);return s.all({contact_id:b.contactId,from_date:{">=":e},request_type:"leave",status_id:{IN:d()},type_id:{IN:l()},options:{limit:1}},null,"from_date ASC",null,!1).then(function(e){b.nextLeaveRequest=e.list[0]||null})}function v(){b.nextLeaveRequest.balance_change=Math.abs(b.nextLeaveRequest.balance_change)}function h(){var t=e.find(b.absenceTypes,function(e){return+e.id==+b.nextLeaveRequest.type_id})||{};b.nextLeaveRequest["type_id.title"]=t.title,b.nextLeaveRequest["type_id.calculation_unit_name"]=t.calculation_unit_name}function p(){b.requestStatus=e.find(b.leaveRequestStatuses,function(e){return+e.value==+b.nextLeaveRequest.status_id})}var g="leave-widget-next-leave",b=this;b.dayTypes={},b.balanceDeduction=0,b.nextLeaveRequest=null,b.requestStatus={},b.$onChanges=i,function(){a.$emit("LeaveWidget::childIsLoading",g)}()}n.component("leaveWidgetNextLeave",{bindings:{absenceTypes:"<",contactId:"<",leaveRequestStatuses:"<"},controller:a,controllerAs:"nextLeave",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget-next-leave.html"}]}),a.$inject=["$q","$scope","LeaveRequest","OptionGroup","shared-settings"]}),define("leave-absences/shared/components/leave-widget/leave-widget.component",["common/angular","common/lodash","common/moment","common/directives/loading","common/directives/help-text.directive","common/filters/time-unit-applier.filter","common/models/contract","common/services/pub-sub","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/components","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-widget/leave-widget-absence-types-amount-taken.component","leave-absences/shared/components/leave-widget/leave-widget-absence-types-available-balance.component","leave-absences/shared/components/leave-widget/leave-widget-next-leave.component"],function(e,t,n){function a(e,a,s,r,o,i,c,u){function l(){q++,A.loading.childComponents=!0}function d(){--q<=0&&(q=0,A.loading.childComponents=!1)}function m(e){return t.find(e,function(e){return e.current})}function f(e){return m(e)||v(e)}function v(e){return t.chain(e).sort(function(e,t){return n(e.end_date).diff(t)}).last().value()}function h(){s.$on("LeaveWidget::childIsLoading",l),s.$on("LeaveWidget::childIsReady",d),p()}function p(){["LeaveRequest::new","LeaveRequest::edit","LeaveRequest::delete","LeaveRequest::updatedByManager","LeaveRequest::edit","contract:created","contract:deleted","contract-refresh"].forEach(function(e){u.subscribe(e,g)})}function g(){y().then(function(){return a.all([b(),R(),_()])}).finally(function(){A.loading.component=!1})}function b(){return o.all().then(o.loadCalculationUnits).then(function(e){A.absenceTypes=e,A.sicknessAbsenceTypes=e.filter(function(e){return+e.is_sick})})}function y(){return i.all({contact_id:A.contactId,deleted:!1}).then(function(e){A.jobContract=t.find(e,function(e){return+e.is_current})}).then(function(){if(!A.jobContract)return a.reject()})}function _(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){A.leaveRequestStatuses=e.filter(function(e){return t.includes(C,e.name)})})}function R(){return r.all().then(f).then(function(e){A.absencePeriod=e})}var C=["approved","admin_approved","awaiting_approval","more_information_required"],q=0,A=this;A.absenceTypes=[],A.absencePeriod=null,A.jobContract=null,A.loading={childComponents:!1,component:!0},A.leaveRequestStatuses=[],A.sicknessAbsenceTypes=[],function(){e.debug("Controller: leaveWidgetController"),h(),g()}()}e.module("leave-absences.components.leave-widget",["common.components","common.directives","common.filters","common.models","common.services","leave-absences.components","leave-absences.models","leave-absences.settings"]).component("leaveWidget",{bindings:{contactId:"<"},controller:a,controllerAs:"leaveWidget",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-widget/leave-widget.html"}]}),a.$inject=["$log","$q","$scope","AbsencePeriod","AbsenceType","Contract","OptionGroup","pubSub"]}),define("contact-summary/modules/contact-summary.module",["common/angular","contact-summary/modules/contact-summary.config","contact-summary/modules/contact-summary.constants","contact-summary/modules/contact-summary.controllers","contact-summary/modules/contact-summary.core","contact-summary/modules/contact-summary.directives","contact-summary/modules/contact-summary.run","contact-summary/modules/contact-summary.services","leave-absences/shared/components/leave-widget/leave-widget.component"],function(e){e.module("contactsummary",["contactsummary.core","contactsummary.config","contactsummary.run","contactsummary.constants","contactsummary.controllers","contactsummary.directives","contactsummary.services","leave-absences.components.leave-widget"])}),function(e,t){t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"contact-summary":e.vars.contactsummary.baseURL+"/js/src/contact-summary"}}),t(["contact-summary/modules/contact-summary.module"],function(){"use strict";document.dispatchEvent("function"==typeof window.CustomEvent?new window.CustomEvent("contactsummaryReady"):function(){var e=document.createEvent("Event");return e.initEvent("contactsummaryReady",!0,!0),e}())})}(CRM,require); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/contactsummary/js/dist/contact-summary.min.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 918922b1125..0826ce0a784 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var t="previous"===e?"subtract":"add";$(n(N.selectedMonth.moment)[t](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,t={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:k()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:n?H:e.pluck(X.supportData.absenceTypes,"id")}};return i.all(t,null,null,null,!1).then(function(e){return z={},n&&(e.list=_(e.list)),C(e.list)})}function S(){var n=X.month.days[0].date,t=X.month.days[X.month.days.length-1].date;return s.get(X.contacts.map(function(e){return e.id}),n,t).then(function(n){V=e.indexBy(n,"contact_id")})}function M(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(n){return e.includes(X.contactIdsToReduceTo,n.contact_id)||e.find(z,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function x(n){var t=I(n);z[n.contact_id]=z[n.contact_id]||{},t.forEach(function(t){e.remove(z[n.contact_id][t.date],function(e){return e.id===n.id})})}function $(){o.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function E(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return z[t]&&z[t][n.date]?z[t][n.date]:[]}).then(function(a){a=U(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(n,a)})})}function B(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(n){return E(e,n.id)}))}))}function F(e,n){X.currentPage=0,X.visible=!0,(n||!Y)&&O()}function U(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(n){var t=e.find(X.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function j(e){h(e),-1!==k().indexOf(e.status_id)&&u(e)}function W(e){return a.all(I(e).map(function(n){return E(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var H=[],Y=!1,G=[],V={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=$,X.contactsList=f,X.getContactUrl=g,function(){var e=n().month(X.month.month).year(X.month.year);q(),T(),X.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={ +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var t="previous"===e?"subtract":"add";$(n(N.selectedMonth.moment)[t](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,t={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:k()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:n?H:e.pluck(X.supportData.absenceTypes,"id")}};return i.all(t,null,null,null,!1).then(function(e){return z={},n&&(e.list=_(e.list)),C(e.list)})}function S(){var n=X.month.days[0].date,t=X.month.days[X.month.days.length-1].date;return s.get(X.contacts.map(function(e){return e.id}),n,t).then(function(n){V=e.indexBy(n,"contact_id")})}function M(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(n){return e.includes(X.contactIdsToReduceTo,n.contact_id)||e.find(z,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function x(n){var t=I(n);z[n.contact_id]=z[n.contact_id]||{},t.forEach(function(t){e.remove(z[n.contact_id][t.date],function(e){return e.id===n.id})})}function $(){o.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function E(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return z[t]&&z[t][n.date]?z[t][n.date]:[]}).then(function(a){a=U(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(n,a)})})}function B(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(n){return E(e,n.id)}))}))}function F(e,n){X.currentPage=0,X.visible=!0,(n||!Y)&&O()}function U(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(n){var t=e.find(X.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function j(e){h(e),-1!==k().indexOf(e.status_id)&&u(e)}function W(e){return a.all(I(e).map(function(n){return E(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var H=[],Y=!1,G=[],V={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=$,X.contactsList=f,X.getContactUrl=g,function(){var e=n().month(X.month.month).year(X.month.year);q(),T(),X.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={ delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements") ;var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index b3f7097f7e1..48baef5a013 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";L(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function E(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=L,X.contactsList=m,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired], dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ -u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0}, -Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0 +},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index ac0062ab845..4af0ecb1c82 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -9,6 +9,6 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";E(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=E,X.contactsList=m,X.getContactUrl=b,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ -var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl") +var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl") ;var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js index 62cc84a0749..abe7f580b98 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.min.js @@ -1,2 +1,2 @@ -!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return t.contact_id&&t.period_id||s.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){l.params.managed_by=e.contactId})}function c(){return r().then(function(n){l.params.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u=this,l={apiName:"LeaveRequest",params:{}};u.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){u.filters=[l]})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/modules/templates","common/services/pub-sub","common/components/notification-badge.component","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","common.components","common.templates","leave-absences.settings","leave-absences.models","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,s,i,o){e.debug("LeaveRequestAPI.all");var c=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?c.resolve({list:[],total:0,allIds:[]}):c.resolve(this.getAll("LeaveRequest",n,t,s,i,"getFull",o)),c.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var s=a.defer();return t.contact_id&&t.period_id||s.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){s.resolve(e.values)}),s.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var s=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?s.reject(n(e.values).map().flatten().value()):s.resolve(e.values)}),s.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,s){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,i,o){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),o=e.assign({},o,{absence_type_id:a,date:n(i).format(s.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",o).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,s,i,o){return n.debug("AbsenceType"),a.extend({all:function(e){return i.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return i.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return i.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return s.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,s,i,o,c,r){function u(e){return h(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return r.all({id:this.type_id}).then(r.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return h(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(c.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function h(n){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function v(n){var a=e.cloneDeep(n),s=a.breakdown.length>1,i=e.first(e.values(a.breakdown)),o=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(i.date),s&&this.getWorkDayForDate(o.date)]).then(function(n){return i.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,s&&(o.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function g(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return c.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return c.deleteComment(e.comment_id)})),t.all(n)}return o.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),c.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?v.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,i.statusNames.cancelled)},approve:function(){return u.call(this,i.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,i.statusNames.rejected)},sendBack:function(){return u.call(this,i.statusNames.moreInformationRequired)},update:function(){return c.update(this.toAPI()).then(function(){return t.all([g.call(this),m.call(this)])}.bind(this))},create:function(){return c.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([g.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return c.delete(this.id)},getBalanceChangeBreakdown:function(){return c.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return c.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return c.isValid(this.toAPI())},isApproved:function(){return d.call(this,i.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,i.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,i.statusNames.cancelled)},isRejected:function(){return d.call(this,i.statusNames.rejected)},isSentBack:function(){return d.call(this,i.statusNames.moreInformationRequired)},loadComments:function(){return this.id?c.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(i.permissions.admin.administer).then(function(n){return n?"admin":c.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?c.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,s,i,o){return t.all(this.processFilters(e),n,s,i,o).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),function(e){define("leave-absences/manager-notification-badge/modules/settings",["common/angular"],function(n){return n.module("manager-notification-badge.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-notification-badge/"})})}(CRM),function(e){define("leave-absences/manager-notification-badge/modules/config",["common/angular","leave-absences/manager-notification-badge/modules/settings"],function(e){return e.module("manager-notification-badge.config",["manager-notification-badge.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])})}(CRM),define("leave-absences/manager-notification-badge/modules/components",["common/angular"],function(e){return e.module("manager-notification-badge.components",[])}),define("leave-absences/manager-notification-badge/components/manager-notification-badge.component",["common/lodash","leave-absences/manager-notification-badge/modules/components"],function(e,n){function t(n,t,a,s,i){function o(){return a.get().then(function(e){l.params.managed_by=e.contactId})}function c(){return r().then(function(n){l.params.status_id=e.find(n,function(e){return e.name===i.statusNames.awaitingApproval}).value})}function r(){return s.valuesOf("hrleaveandabsences_leave_request_status")}n.debug("Component: manager-notification-badge");var u=this,l={apiName:"LeaveRequest",params:{}};u.refreshCountEventName="ManagerBadge:: Update Count",function(){t.all([o(),c()]).then(function(){u.filters=[l]})}()}n.component("managerNotificationBadge",{templateUrl:["settings",function(e){return e.pathTpl+"components/manager-notification-badge.html"}],controllerAs:"managerNotificationBadge",controller:t}),t.$inject=["$log","$q","Session","OptionGroup","shared-settings"]}),define("leave-absences/manager-notification-badge/app",["common/angular","common/models/session.model","common/modules/templates","common/services/pub-sub","common/components/notification-badge.component","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/leave-request.model","leave-absences/manager-notification-badge/modules/config","leave-absences/manager-notification-badge/components/manager-notification-badge.component"],function(e){return e.module("manager-notification-badge",["ngResource","common.components","common.templates","leave-absences.settings","leave-absences.models","manager-notification-badge.components","manager-notification-badge.config"]).run(["$log",function(e){e.debug("app.run")}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/manager-notification-badge":t+"/manager-notification-badge"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/manager-notification-badge/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-notification-badge]"),["manager-notification-badge"])})})}(CRM,require),define("manager-notification-badge",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-notification-badge.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 788116497e5..83c82605850 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -7,7 +7,7 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[P]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function P(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=P(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t}).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var n="previous"===e?"subtract":"add";M(t(N.selectedMonth.moment)[n](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride +;return!0===t?0===f(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var n="previous"===e?"subtract":"add";M(t(N.selectedMonth.moment)[n](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride }):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),q(e.list)})}function O(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&I()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function H(e){return a.all(P(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=M,X.contactsList=f,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);$(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id} ;return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||P())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){ define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js index e885aeebd7f..423784caf24 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/apis/leave-request.api.js @@ -191,7 +191,7 @@ define([ find: function (id) { $log.debug('LeaveRequestAPI.find'); - return this.sendGET('LeaveRequest', 'getFull', { id: id }) + return this.sendGET('LeaveRequest', 'getFull', { id: id }, false) .then(function (response) { if (response.values.length === 0) { return $q.reject('LeaveRequest not found with this ID'); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js index 2ff9df18d3e..a9b70933bd3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/apis/leave-request.api.spec.js @@ -582,9 +582,9 @@ define([ $httpBackend.flush(); }); - it('calls the LeaveRequest.get endpoint', function () { + it('calls the LeaveRequest.get endpoint and does not cache results', function () { promise.then(function () { - expect(LeaveRequestAPI.sendGET).toHaveBeenCalledWith('LeaveRequest', 'getFull', { id: id }); + expect(LeaveRequestAPI.sendGET).toHaveBeenCalledWith('LeaveRequest', 'getFull', { id: id }, false); }); }); }); From 1962e1a1cbf2addddeadd12eb06a463d54a7c77e Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Fri, 1 Jun 2018 19:31:58 +0100 Subject: [PATCH 216/251] PCHR-3772: Flush days data before load --- .../js/angular/dist/absence-tab.min.js | 6 +++--- .../js/angular/dist/admin-dashboard.min.js | 8 ++++---- .../js/angular/dist/manager-leave.min.js | 4 ++-- .../js/angular/dist/my-leave.min.js | 10 +++++----- .../components/leave-calendar-month.component.js | 16 ++++++++++++++++ .../leave-calendar-month.component.spec.js | 12 ++++++++++++ 6 files changed, 42 insertions(+), 14 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js index 0826ce0a784..f5b35b4e741 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.min.js @@ -1,5 +1,5 @@ !function(e){define("leave-absences/shared/config",[],function(){var n=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":n+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/modules/shared-settings",["common/angular"],function(n){return n.module("leave-absences.settings",[]).constant("shared-settings",{attachmentToken:e.vars.leaveAndAbsences.attachmentToken,debug:e.debug,managerPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/",sharedPathTpl:e.vars.leaveAndAbsences.baseURL+"/views/shared/",serverDateFormat:"YYYY-MM-DD",serverDateTimeFormat:"YYYY-MM-DD HH:mm:ss",permissions:{admin:{access:"access leave and absences",administer:"administer leave and absences"},ssp:{access:"access leave and absences in ssp",manage:"manage leave and absences in ssp"}},fileUploader:{queueLimit:10},statusNames:{approved:"approved",adminApproved:"admin_approved",awaitingApproval:"awaiting_approval",moreInformationRequired:"more_information_required",rejected:"rejected",cancelled:"cancelled"}})})}(CRM),define("leave-absences/shared/modules/apis",["common/angular","common/modules/apis","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.apis",["common.apis","leave-absences.settings"])}),define("leave-absences/shared/modules/models-instances",["common/angular","common/models/instances/instance","common/modules/services","common/modules/models","common/services/check-permissions","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models.instances",["common.models","common.models.instances","common.services","leave-absences.settings"])}),define("leave-absences/shared/modules/models",["common/angular","common/modules/models","common/modules/services","leave-absences/shared/modules/apis","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){"use strict";return e.module("leave-absences.models",["common.models","common.services","leave-absences.apis","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,n,t){"use strict";t.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(t,a,o){return t.debug("AbsenceTypeAPI"),a.extend({all:function(n){return t.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(n||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,s,i){return t.debug("AbsenceTypeAPI.calculateToilExpiryDate"),i=e.assign({},i,{absence_type_id:a,date:n(s).format(o.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",i).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,n){return e.debug("AbsenceTypeInstance"),n.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,n){"use strict";n.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(n,t,a,o,s,i){return n.debug("AbsenceType"),a.extend({all:function(e){return s.all(e).then(function(e){return e.map(function(e){return i.init(e,!0)})})},calculateToilExpiryDate:function(e,n,t){return s.calculateToilExpiryDate(e,n,t)},canExpire:function(e){return s.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(n){return o.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(t){return t=e.indexBy(t,"value"),e.map(n,function(n){return e.assign(n,{calculation_unit_label:t[n.calculation_unit].label,calculation_unit_name:t[n.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,n){"use strict";n.factory("WorkPatternAPI",["$log","api",function(n,t){function a(n){var t=e.clone(n);return t.workPattern=t["api.WorkPattern.get"].values[0],delete t["api.WorkPattern.get"],t}return n.debug("WorkPatternAPI"),t.extend({assignWorkPattern:function(n,t,a,o,s,i){return this.sendPOST("ContactWorkPattern","create",e.assign({},i,{contact_id:n,pattern_id:t,effective_date:a,effective_end_date:o,change_reason:s})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(t,a,o,s){return n.debug("WorkPatternAPI.getCalendar",t,a,o,s),this.sendGET("WorkPattern","getcalendar",e.assign({},s,{contact_id:e.isArray(t)?{IN:t}:t,start_date:a,end_date:o}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(n,t,o){return this.sendGET("ContactWorkPattern","get",e.assign({},t,{contact_id:n,"api.WorkPattern.get":{id:"$value.pattern_id"}}),o).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,n,t){"use strict";t.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(t,a,o,s,i){function r(n,t){return u().then(function(a){var o=this.days[c(n).valueOf()];return!!o&&e.find(a,function(e){return e.name===t}).value===o.type}.bind(this))}function c(e){return n(e,s.serverDateFormat).clone()}function u(){return l=l||i.valuesOf("hrleaveandabsences_work_day_type")}var l;return o.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return r.call(this,e,"non_working_day")},isWeekend:function(e){return r.call(this,e,"weekend")},isWorkingDay:function(e){return r.call(this,e,"working_day")},transformAttributes:function(n){var t={};return n.calendar.forEach(function(e){t[c(e.date).valueOf()]=e}),e(n).omit("calendar").assign({days:t}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,n){"use strict";n.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(n,t,a,o){return n.debug("Calendar"),t.extend({get:function(t,s,i,r){return n.debug("Calendar.get"),a.getCalendar(t,s,i,r).then(function(n){var a=n.values.map(function(e){return o.init(e)});return e.isArray(t)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,t){function a(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(t.remainder=a[0].remainder),delete t["api.LeavePeriodEntitlement.getremainder"],t}function o(e){var t=n.clone(e),a=t["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return t.value=a,delete t["api.LeavePeriodEntitlement.getentitlement"],t}return e.debug("EntitlementAPI"),t.extend({all:function(n,t){return e.debug("EntitlementAPI.all"),n["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},t&&(n["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",n,!1).then(function(e){return e.values}).then(function(e){return e=e.map(o),t&&(e=e.map(a)),e})},breakdown:function(n){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",n).then(function(e){return e.values})},getLeaveBalances:function(n,t,a,o,s){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",n,t,a,o,"getLeaveBalances",s)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,n){return e.debug("EntitlementLogAPI"),n.extend({all:function(n){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",n,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,n,t){return e.debug("EntitlementInstance"),n.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return t.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,n){"use strict";n.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(n,t,a,o,s){return n.debug("Entitlement"),t.extend({all:function(e,n){return a.all(this.processFilters(e),n).then(function(e){return e.map(function(e){return o.init(e,!0)})})},breakdown:function(n,t){return a.breakdown(n).then(function(n){return t?(t.map(function(t){var a=e.find(n,function(e){return e.id===t.id});return a&&(t.breakdown=a.breakdown),t}),t):n.map(function(e){return o.init(e,!0)})})},logs:function(n){return n=e.cloneDeep(n||{}),n.contact_id&&(n["entitlement_id.contact_id"]=n.contact_id,delete n.contact_id),n.period_id&&(n["entitlement_id.period_id"]=n.period_id,delete n.period_id),n.return=n.return||[],n.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),s.all(n)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,n){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,t,a){return e.debug("LeaveRequestAPI"),t.extend({all:function(n,t,o,s,i){e.debug("LeaveRequestAPI.all");var r=a.defer();return n&&n.contact_id&&n.contact_id.IN&&0===n.contact_id.IN.length?r.resolve({list:[],total:0,allIds:[]}):r.resolve(this.getAll("LeaveRequest",n,t,o,s,"getFull",i)),r.promise},balanceChangeByAbsenceType:function(t){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var o=a.defer();return t.contact_id&&t.period_id||o.reject("contact_id and period_id are mandatory"),t=n.defaults(t,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",t,!1).then(function(e){o.resolve(e.values)}),o.promise},calculateBalanceChange:function(t){return e.debug("LeaveRequestAPI.calculateBalanceChange",t),this.sendPOST("LeaveRequest","calculatebalancechange",t).then(function(e){return e.values.breakdown=n.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,n){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:n.toString()},!1)},create:function(n){return e.debug("LeaveRequestAPI.create",n),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,attachment_id:t}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,t){return t=n.assign({},t,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",t).then(function(e){return e.values})},find:function(n){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:n},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",t,!1).then(function(e){return e.values})},getComments:function(e,t){return t=n.assign({},t,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",t,!1).then(function(e){return e.values})},isManagedBy:function(n,t){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:n,contact_id:t}).then(function(e){return e.values})},isValid:function(t){e.debug("LeaveRequestAPI.isValid",t);var o=a.defer();return this.sendPOST("LeaveRequest","isValid",t).then(function(e){e.count>0?o.reject(n(e.values).map().flatten().value()):o.resolve(e.values)}),o.promise},saveComment:function(e,t,a){return a=n.assign({},a,{leave_request_id:e,text:t.text,contact_id:t.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(n){e.debug("LeaveRequestAPI.update",n);var t=a.defer();return n.id||t.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",n).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,n,t){"use strict";t.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(t,a,o,s,i,r,c){function u(e){return p(e).then(function(e){var n=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=n,t.reject(e)}.bind(this))}.bind(this))}function l(){return c.all({id:this.type_id}).then(c.loadCalculationUnits).then(function(e){return t.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var n=[];return e.forEach(this.files,function(e){e.toBeDeleted&&n.push(r.deleteAttachment(this.id,e.attachment_id))}.bind(this)),t.all(n)}function f(e){return n.duration(e.time_to).subtract(n.duration(e.time_from)).asHours()}function p(n){return o.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){return e.find(t,function(e){return e.name===n})})}function h(n){var a=e.cloneDeep(n),o=a.breakdown.length>1,s=e.first(e.values(a.breakdown)),i=e.last(e.values(a.breakdown));return t.all([this.getWorkDayForDate(s.date),o&&this.getWorkDayForDate(i.date)]).then(function(n){return s.amount=n[0].time_from?Math.min(this.from_date_amount,f(n[0])):0,o&&(i.amount=n[1].time_from?Math.min(this.to_date_amount,f(n[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,n){return e+n.amount},0),a}.bind(this))}function v(){var e=this.id,n=[];return n.push(t.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(n){return function(){return r.saveComment(e,n)}}))),n=n.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return r.deleteComment(e.comment_id)})),t.all(n)}return i.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(n){var t=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===n&&e.pull(t,"from_date_type","to_date_type"),r.calculateBalanceChange(e.pick(this,t)).then(function(e){return"hours"===n?h.call(this,e):e}.bind(this))},cancel:function(){return u.call(this,s.statusNames.cancelled)},approve:function(){return u.call(this,s.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return u.call(this,s.statusNames.rejected)},sendBack:function(){return u.call(this,s.statusNames.moreInformationRequired)},update:function(){return r.update(this.toAPI()).then(function(){return t.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return r.create(this.toAPI()).then(function(e){return this.id=e.id,t.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(n){if(n.comment_id)return void(n.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return n.created_at===e.created_at&&n.text===e.text})},delete:function(){return r.delete(this.id)},getBalanceChangeBreakdown:function(){return r.getBalanceChangeBreakdown(this.id).then(function(n){return{amount:e.reduce(n.values,function(e,n){return e+parseFloat(n.amount)},0),breakdown:n.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return r.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return t.reject(e)})},isValid:function(){return r.isValid(this.toAPI())},isApproved:function(){return d.call(this,s.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,s.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,s.statusNames.cancelled)},isRejected:function(){return d.call(this,s.statusNames.rejected)},isSentBack:function(){return d.call(this,s.statusNames.moreInformationRequired)},loadComments:function(){return this.id?r.getComments(this.id).then(function(e){this.comments=e}.bind(this)):t.resolve()},roleOf:function(e){return this.contact_id===e?t.resolve("owner"):a(s.permissions.admin.administer).then(function(n){return n?"admin":r.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])},loadAttachments:function(){return this.id?r.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):t.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,n,t,a){return e.debug("LeaveRequest"),n.extend({all:function(e,n,o,s,i){return t.all(this.processFilters(e),n,o,s,i).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return t.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return t.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/instances/work-pattern.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("WorkPatternInstance",["$log","ModelInstance",function(e,n){return e.debug("WorkPatternInstance"),n.extend({})}])}),define("leave-absences/shared/models/work-pattern.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/work-pattern.instance"],function(e,n){"use strict";n.factory("WorkPattern",["$log","Model","WorkPatternAPI","WorkPatternInstance",function(n,t,a,o){return n.debug("WorkPattern"),t.extend({assignWorkPattern:function(e,n,t,o,s,i){return a.assignWorkPattern(e,n,t,o,s,i)},default:function(){return a.get({is_default:!0}).then(function(n){return o.init(e.first(n),!0)})},unassignWorkPattern:function(e){return a.unassignWorkPattern(e)},workPatternsOf:function(e,n,t){return a.workPatternsOf(e,n,t).then(function(e){return e.map(function(e){return o.init(e,!0)})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,n,t){function a(e,n,t,a,o,s,i){function r(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return c(e).then(function(t){return d.lookupContacts=t,n.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():n.resolve(null)])}).then(function(e){var n=e[0];return d.contactIdsToReduceTo=e[1],n})}}}function c(e){return"me"===e?t.leaveManagees(d.contactId):"unassigned"===e?t.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function u(e){s.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=i.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=u,r()}}}t.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t,a){function o(){return{loadContacts:function(){return t.init({id:i.contactId}).leaveManagees().then(function(e){i.lookupContacts=e}).then(function(){return s.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var s,i;return{init:function(e){return i=e,s=a.init(i),i.showContactName=!0,i.showFilters=!0,o()}}}t.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(e,n,t){function a(){return{loadContacts:function(){return s.displaySingleContact&&(s.lookupContacts=[{id:s.contactId}]),o.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var o,s;return{init:function(e){return s=e,o=t.init(s),s.filters.userSettings.contacts_with_leaves=!0,s.showTheseContacts=[s.contactId],s.showContactName=!0,s.showFilters=!0,a()}}}t.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],t=n(N.selectedPeriod.start_date).clone().startOf("month"),a=n(N.selectedPeriod.end_date).clone().endOf("month");t.isBefore(a);)e.push(R(t)),t.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){s.$new().$watch(function(){return N.selectedMonthIndex},function(e,n){null!==n&&e!==n&&($(),x(),O())})}function v(e){N.injectMonth=!0,B("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){F=t("LeaveCalendar"+e.capitalize(U)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function _(){return r.all().then(function(n){N.absencePeriods=e.sortBy(n,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(L)}function y(){return c.all().then(c.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function C(){return F.loadContacts().then(function(e){N.contacts=e})}function T(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return u.all()}function D(){return a.all([y(),A(),q()]).then(function(n){N.supportData.absenceTypes=n[0],N.supportData.publicHolidays=n[1],N.supportData.calculationUnits=n[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=n[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=n[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(n[2].hrleaveandabsences_toil_amounts,"value")})}function P(){var e=a.resolve();return N.injectMonth&&(e=B("destroyed"),N.injectMonth=!1),e}function R(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:n().year(e.year()).month(e.month())}}function I(){var n=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),n!==N.selectedPeriod.id&&f(),L(),x(),k("month")}function w(e){var t="previous"===e?"subtract":"add";$(n(N.selectedMonth.moment)[t](1,"month")),x(),k("month")}function k(n){n=e.includes(["contacts","period","month"],n)?n:"period",a.resolve().then(P).then("period"===n&&f).then("period"===n&&S).then("contacts"===n&&C).then("month"===n&&x).then(function(){v("contacts"===n)})}function O(e){s.$emit("LeaveCalendar::showMonth",!!e)}function L(){$(n())}function S(){$(N.months[0].moment)}function M(t){var a="previous"===t?"first":"last",o=e[a](N.months),s=n().year(o.year).month(o.month);N.monthPaginatorsAvailability[t]=!N.selectedMonth.moment.isSame(s,"month")}function x(){M("previous"),M("next")}function $(n){n&&(N.selectedMonthIndex=p(n)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function E(){return N.roleOverride?a.resolve().then(function(){U=N.roleOverride}):a.all([d(i.permissions.admin.administer),d(i.permissions.ssp.manage)]).then(function(e){U=e[0]?"admin":e[1]?"manager":"staff"})}function B(n){return a(function(t){var a=s.$on("LeaveCalendar::month"+e.capitalize(n),function(){a(),t()})})}o.debug("Component: leave-calendar");var F,U,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=I,N.paginateMonth=w,N.refresh=k,function(){E().then(h).then(b).then(P).then(function(){return a.all([_(),C(),D(),N.showFilters?T():e.noop])}).then(function(){m(),v(),x()}).then(function(){N.loading.page=!1})}()}t.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,t={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:k()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:n?H:e.pluck(X.supportData.absenceTypes,"id")}};return i.all(t,null,null,null,!1).then(function(e){return z={},n&&(e.list=_(e.list)),C(e.list)})}function S(){var n=X.month.days[0].date,t=X.month.days[X.month.days.length-1].date;return s.get(X.contacts.map(function(e){return e.id}),n,t).then(function(n){V=e.indexBy(n,"contact_id")})}function M(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(n){return e.includes(X.contactIdsToReduceTo,n.contact_id)||e.find(z,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function x(n){var t=I(n);z[n.contact_id]=z[n.contact_id]||{},t.forEach(function(t){e.remove(z[n.contact_id][t.date],function(e){return e.id===n.id})})}function $(){o.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function E(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(n.date)})}),s.then(function(){return z[t]&&z[t][n.date]?z[t][n.date]:[]}).then(function(a){a=U(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:y(n,a)})})}function B(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(n){return E(e,n.id)}))}))}function F(e,n){X.currentPage=0,X.visible=!0,(n||!Y)&&O()}function U(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(n){var t=e.find(X.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function j(e){h(e),-1!==k().indexOf(e.status_id)&&u(e)}function W(e){return a.all(I(e).map(function(n){return E(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var H=[],Y=!1,G=[],V={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=$,X.contactsList=f,X.getContactUrl=g,function(){var e=n().month(X.month.month).year(X.month.year);q(),T(),X.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={ -delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements") -;var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); +},!0)}function r(){u.absenceTypesToFilterBy=[]}function c(n){e.includes(u.absenceTypesToFilterBy,n)?e.remove(u.absenceTypesToFilterBy,function(e){return n===e}):u.absenceTypesToFilterBy.push(n)}n.debug("Component: leave-calendar-legend");var u=this;u.absenceTypesToFilterBy=[],u.legendCollapsed=!1,u.nonWorkingDayTypes=[{label:"Weekend",cssClassSuffix:"weekend"},{label:"Public Holiday",cssClassSuffix:"public-holiday"},{label:"Non Working Day",cssClassSuffix:"non-working-day"}],u.otherBadges=[{label:"AM",description:"AM Only"},{label:"PM",description:"PM Only"},{label:"HH:MM",description:"Time",cssClassSuffix:"hours"},{label:"",description:"Requested",cssClassSuffix:"requested"},{label:"AT",description:"Accrued TOIL"}],u.checkIfAbsenceTypeIdIsDefined=a,u.checkIfAbsenceTypeIsSelectedForFiltering=o,u.getAbsenceTypeStyle=s,u.resetFilteringByAbsenceTypes=r,u.toggleFilteringByAbsenceType=c,function(){i()}()}n.component("leaveCalendarLegend",{bindings:{absenceTypes:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-legend.html"}],controllerAs:"legend",controller:t}),t.$inject=["$log","$rootScope"]}),define("leave-absences/shared/components/leave-calendar-month.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(e){T([e]),H(e)}function l(e){return{index:e.format("YYYY-MM"),month:e.month(),year:e.year(),name:e.format("MMMM"),loading:!0,days:d(e)}}function d(t){var a=n(),o=t.clone().startOf("month");return e.map(e.times(t.daysInMonth()),function(){var e={date:o.format("YYYY-MM-DD"),name:o.format("ddd"),index:o.format("D"),current:a.isSame(o,"day"),enabled:o.isSameOrAfter(Q.period.start_date)&&o.isSameOrBefore(Q.period.end_date),contactsData:{}};return o.add(1,"day"),e})}function m(e){return z[e]}function f(){return Q.showOnlyWithLeaveRequests?Q.contacts.filter(function(n){var t=Object.keys(X[n.id]||{}).length,a=e.includes(Q.showTheseContacts,n.id);return t||a}):Q.contacts}function p(e){return n(e,c.serverDateFormat)}function h(e){var n=b(e);n&&($(n),H(n))}function v(n){var t={request_type:"toil"};return e.some(n,t)&&!e.every(n,t)?e.filter(n,t):n}function b(n){var t;return e.find(X[n.contact_id],function(a){return t=e.find(a,function(e){return+e.id==+n.id})}),t}function g(){Q.month.days.forEach(function(e){e.contactsData={}})}function _(e){return CRM.url("civicrm/contact/view",{cid:e})}function y(n){return e.filter(n,function(e){return!!e.type_id})}function q(e,t){var a={};return t.forEach(function(t){a[t.id]={styles:j(t),isAccruedTOIL:P(t,"toil"),isRequested:I(t),isAM:D("half_day_am",t,e.date),isPM:D("half_day_pm",t,e.date),isSingleDay:n(t.from_date).isSame(t.to_date,"day")}}),a}function C(){Q.supportData.dayTypes=e.indexBy(Q.supportData.dayTypes,"name"),Q.supportData.leaveRequestStatuses=e.indexBy(Q.supportData.leaveRequestStatuses,"value"),Q.supportData.publicHolidays=e.transform(Q.supportData.publicHolidays,function(e,n){e[p(n.date).valueOf()]=n},{})}function T(e){return e.forEach(function(e){var n=w(e);X[e.contact_id]=X[e.contact_id]||{},n.forEach(function(n){X[e.contact_id][n.date]||(X[e.contact_id][n.date]=[]),X[e.contact_id][n.date].push(e)})}),a.resolve()}function A(){V.push(o.$on("LeaveCalendar::showMonth",U)),V.push(r.subscribe("LeaveRequest::new",u)),V.push(r.subscribe("LeaveRequest::edit",W)),V.push(r.subscribe("LeaveRequest::updatedByManager",W)),V.push(r.subscribe("LeaveRequest::delete",h)),V.push(r.subscribe("LeaveRequest::statusUpdate",function(e){"delete"===e.status?h(e.leaveRequest):W(e.leaveRequest)})),o.$on("LeaveCalendar::updateFiltersByAbsenceType",function(e,n){Y=n,U(e,!0)})}function D(e,t,a){var o=Q.supportData.dayTypes[e];return n(a).isSame(t.from_date,"day")?o.value===t.from_date_type:n(a).isSame(t.to_date,"day")?o.value===t.to_date_type:void 0}function P(e,n){return e.request_type===n}function R(e){return!!Q.supportData.publicHolidays[p(e).valueOf()]}function I(n){var t=Q.supportData.leaveRequestStatuses[n.status_id].name;return e.contains([c.statusNames.awaitingApproval,c.statusNames.moreInformationRequired],t)}function w(t){for(var a=[],o=n(t.from_date).clone(),s=n(t.to_date);o.isSameOrBefore(s);)o.month()===Q.month.month&&o.year()===Q.month.year&&a.push(e.find(Q.month.days,function(e){return e.date===o.format("YYYY-MM-DD")})),o.add(1,"day");return a}function k(n){var t=e.find(Q.supportData.leaveRequestStatuses,function(e){return e.name===n});return t?t.value:null}function O(){return[k(c.statusNames.approved),k(c.statusNames.adminApproved),k(c.statusNames.awaitingApproval),k(c.statusNames.moreInformationRequired)]}function L(){return Q.month.loading=!0,a.all([M(),S()]).then(x).then(F).then(function(){G=!0,Q.month.loading=!1})}function S(){var n=Y.length>0,t={from_date:{to:Q.month.days[Q.month.days.length-1].date+" 23:59:59"},to_date:{from:Q.month.days[0].date+" 00:00:00"},status_id:{IN:O()},contact_id:{IN:Q.contacts.map(function(e){return e.id})},type_id:{IN:n?Y:e.pluck(Q.supportData.absenceTypes,"id")}};return g(),i.all(t,null,null,null,!1).then(function(e){return X={},n&&(e.list=y(e.list)),T(e.list)})}function M(){var n=Q.month.days[0].date,t=Q.month.days[Q.month.days.length-1].date;return s.get(Q.contacts.map(function(e){return e.id}),n,t).then(function(n){z=e.indexBy(n,"contact_id")})}function x(){return Q.contactIdsToReduceTo&&(Q.contacts=Q.contacts.filter(function(n){return e.includes(Q.contactIdsToReduceTo,n.contact_id)||e.find(X,function(e){return e.contact_id===n.contact_id})})),a.resolve()}function $(n){var t=w(n);X[n.contact_id]=X[n.contact_id]||{},t.forEach(function(t){e.remove(X[n.contact_id][t.date],function(e){return e.id===n.id})})}function E(){o.$emit("LeaveCalendar::monthDestroyed"),V.map(function(e){e.remove?e.remove():e()})}function B(n,t,o){var s,i;return n.contactsData[t]=n.contactsData[t]||{},i=m(t),s=!0===o?a.resolve():a.all([i.isWeekend(p(n.date)),i.isNonWorkingDay(p(n.date))]).then(function(a){e.assign(n.contactsData[t],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:R(n.date)})}),s.then(function(){return X[t]&&X[t][n.date]?X[t][n.date]:[]}).then(function(a){a=N(a),e.assign(n.contactsData[t],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:q(n,a)})})}function F(){return a.all(Q.month.days.map(function(e){return a.all(Q.contacts.map(function(n){return B(e,n.id)}))}))}function U(e,n){Q.currentPage=0,Q.visible=!0,(n||!G)&&L()}function N(t){return e.sortBy(t,function(e){return+n(e.from_date).format("X")+(D("half_day_pm",e,e.from_date)?1:0)})}function j(n){var t=e.find(Q.supportData.absenceTypes,function(e){return e.id===n.type_id});return n.balance_change>0?{borderColor:t.color}:{borderColor:t.color,backgroundColor:t.color}}function W(e){h(e),-1!==O().indexOf(e.status_id)&&u(e)}function H(e){return a.all(w(e).map(function(n){return B(n,e.contact_id,!0)}))}t.debug("Component: leave-calendar-month");var Y=[],G=!1,V=[],z={},X={},Q=this;Q.currentPage=0,Q.pageSize=20,Q.visible=!1,Q.showContactName=!!Q.showContactName,Q.showOnlyWithLeaveRequests=!!Q.showOnlyWithLeaveRequests,Q.$onDestroy=E,Q.contactsList=f,Q.getContactUrl=_,function(){var e=n().month(Q.month.month).year(Q.month.year);C(),A(),Q.month=l(e),o.$emit("LeaveCalendar::monthInjected")}()}t.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,n){"use strict";function t(n,t,a){function o(){var n=t.defer();return a.open(e.defaults(s(),{onConfirm:function(){n.resolve(!0)}})),n.promise}function s(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return n.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:s,promptBalanceChangeRecalculation:o}}n.factory("LeaveRequestService",t),t.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,n,t){function a(t,a,o,s,i,r,c,u){function l(n){y=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],n)||"toil"===q.leaveRequest.request_type?o.open(h(n)):f(n)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function m(t){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([C.awaitingApproval,C.moreInformationRequired],t):"3"===a?n().isBefore(q.leaveRequest.from_date):"2"===a)}function f(n){o.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(t){return t?e.assign(i.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){s.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(n)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var n=T[e].dialog;return{title:"Confirm "+n.title+"?",copyCancel:"Cancel",copyConfirm:n.btnLabel,classConfirm:"btn-"+n.btnClass,msg:n.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){u.error("Error:",e)})}}}function v(e,n,t,a,o){e.stopPropagation(),s.openModal(n,t,a,o)}function b(n){var t=e.find(q.leaveRequestStatuses,function(e){return e.name===c.statusNames.awaitingApproval}).value;y===t&&r.publish("ManagerBadge:: Update Count"),r.publish("LeaveRequest::statusUpdate",{status:n,leaveRequest:q.leaveRequest})}function g(){var n=q.leaveRequestStatuses[q.leaveRequest.status_id].name,t=e.compact(e.map(T,function(t,a){return e.includes(t.allowedStatuses,n)?a:null}));!m(n)&&e.pull(t,"cancel"),"admin"!==q.role&&e.pull(t,"delete"),"staff"===q.role&&e.pull(t,"approve","reject"),"staff"!==q.role&&_(t),d()&&t.push("delete"),q.allowedActions=e.map(t,function(e){return{key:e,label:T[e].label,isDirectAction:T[e].isDirectAction}})}function _(n){e.each(n,function(t,a){"edit"===t&&(n[a]="respond"),e.includes(["respond","view"],t)&&(n[a]="edit")})}t.debug("Component: leave-request-action-dropdown");var y,q=this,C=c.statusNames,T={edit:{label:"Edit",allowedStatuses:[C.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[C.moreInformationRequired]},view:{label:"View",allowedStatuses:[C.approved,C.rejected,C.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[C.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.approved,C.rejected,C.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[C.awaitingApproval,C.moreInformationRequired,C.approved,C.rejected,C.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}t.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){q.request.comments.push({contact_id:y,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function m(e){return n.utc(e,i.serverDateTimeFormat).local().format(s.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===y?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var n=e.indexBy(q.request.comments,"contact_id"),t=Object.keys(n);return r.all({id:{IN:t}},{page:1,size:0}).then(function(n){q.comment.contacts=e.indexBy(n.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function _(){return q.loading.component=!0,c.get().then(function(e){y=e.contactId}).then(function(){q.loading.component=!1})}t.debug("Component: leave-request-popup-comments-tab");var y=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=u,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=m,q.getActiveComments=f,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){o.$emit("LeaveRequestPopup::addTab",q),g(),_()}()}t.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d,m){function f(){ne.balance.closing=ne.balance.opening+ne.balance.change.amount}function p(e){return n(e,c.serverDateFormat).toDate()}function h(e){return n(e).format(c.serverDateFormat)}function v(e){var n;return i.resolve().then(function(){N(e),"from"===e&&U(),O("hours")&&(_(e),"from"!==e||ne.uiOptions.multipleDays||_("to")),ne.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(n=e.id!==ne.period.id,n&&(ne.period=e),!ne.period.id)return i.reject("Please change date as it is not in any absence period")}).then(W).then(function(){if(n)return x()}).then(function(){return ne.onDateChangeExtended&&ne.onDateChangeExtended(e)}).then(function(){if(V(),!n)return E();o.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(D).finally(y)}function b(){return V(),E()}function g(){return ne.uiOptions.toDate=null,N("to"),i.resolve().then(V).then(ne.setDaysSelectionModeExtended).then(y).then(!ne.uiOptions.multipleDays&&E)}function _(e){ne.uiOptions.times[e].loading=!0}function y(){["from","to"].forEach(function(e){ne.loading[e+"DayTypes"]=!1,O("hours")&&(ne.uiOptions.times[e].loading=!1)})}function q(t){var a=n(ne.uiOptions[t+"Date"]).format(ne.uiOptions.userDateFormat.toUpperCase());return e.find(ne.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function C(){return ne.request?ne.request.request_type:ne.leaveType||null}function T(e){return n().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),ne.loading.balanceChange=!0,ne.request.getBalanceChangeBreakdown().then(j).catch(D)}function D(n){o.$broadcast("LeaveRequestPopup::handleError",e.isArray(n)?n:[n]),ne.loading.fromDayTypes=!1,ne.loading.balanceChange=!1,ne.loading.tab=!1,ne.loading.toDayTypes=!1}function P(){return ne.isMode("create")||ne.forceRecalculateBalanceChange?E():A()}function R(){var e=ne.request.attributes();return ne.uiOptions.fromDate=p(ne.request.from_date),ne.request.to_date=e.to_date,ne.request.to_date_type=e.to_date_type,ne.uiOptions.toDate=p(ne.request.to_date),ne.initDayTypesExtended?ne.initDayTypesExtended():i.resolve()}function I(){ee.push(o.$on("LeaveRequestPopup::absenceTypeChanged",function(){Q()}),o.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,n){J(n)}),o.$on("LeaveRequestPopup::recalculateBalanceChange",E))}function w(){ne.isMode("edit")&&(ne.isLeaveStatus(c.statusNames.approved)||ne.isLeaveStatus(c.statusNames.adminApproved))&&(Z={absenceTypeId:ne.request.type_id,value:ne.selectedAbsenceType.remainder-ne.request.balance_change})}function k(){o.$watch(function(){return ne.uiOptions.times.from.time},function(e,n){e!==n&&(ne.uiOptions.multipleDays||(K(e),V()))})}function O(e){return ne.selectedAbsenceType.calculation_unit_name===e}function L(e){return ne.request.request_type===e}function S(n){return e.includes(["weekend","non_working_day","public_holiday"],n)}function M(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){ne.requestDayTypes=e})}function x(){return u.get(ne.request.contact_id,ne.period.start_date,ne.period.end_date).then(function(e){ne.calendar=e})}function $(){var e=(ne.pagination.currentPage-1)*ne.pagination.numPerPage,n=e+ne.pagination.numPerPage;ne.pagination.filteredbreakdown=ne.balance.change.breakdown.slice(e,n)}function E(){return z(),ne.canCalculateChange()?(ne.loading.balanceChange=!0,ne.request.change_balance=!0,ne.calculateBalanceChange().then(j).catch(D).finally(function(){ne.loading.balanceChange=!1})):i.resolve()}function B(){ne.pagination.totalItems=ne.balance.change.breakdown.length,ne.pagination.filteredbreakdown=ne.balance.change.breakdown,ne.pagination.pageChanged()}function F(){return h(ne.request.from_date)===h(ne.request.to_date)}function U(){ne.uiOptions.toDate&&ne.uiOptions.fromDate&&ne.uiOptions.multipleDays&&n(ne.uiOptions.toDate).isSameOrBefore(ne.uiOptions.fromDate)&&(ne.uiOptions.toDate=null,N("to"))}function N(e){ne.resetUIInputsExtended&&ne.resetUIInputsExtended(e),V(),z()}function j(e){ne.balance.change=e,ne.request.balance_change=e.amount,f(),B(),ne.loading.balanceChange=!1}function W(){var e,t,a;ne.uiOptions.fromDate?(e=n(ne.uiOptions.fromDate).add(1,"day").toDate(),a=e,t=e):(a=p(ne.period.start_date),t=ne.uiOptions.date.to.options.minDate),ne.uiOptions.date.to.options.initDate=t,ne.uiOptions.date.to.options.minDate=a,ne.uiOptions.date.to.options.maxDate=p(ne.period.end_date)}function H(){return!ne.isMode("create")&&F()||ne.isMode("create")&&(L("sickness")||O("hours"))?ne.uiOptions.multipleDays=!1:ne.uiOptions.multipleDays=!0,i.resolve().then(ne.setDaysSelectionModeExtended)}function Y(){Z&&Z.absenceTypeId===ne.selectedAbsenceType.id?ne.balance.opening=Z.value||0:ne.balance.opening=ne.selectedAbsenceType.remainder}function G(){ne.selectedAbsenceType=e.find(ne.absenceTypes,function(e){return e.id===ne.request.type_id})}function V(){var e=ne.uiOptions,n=e.times;ne.request.from_date=e.fromDate?h(e.fromDate):null,ne.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(ne.request.to_date=ne.request.from_date,ne.request.to_date_type=ne.request.from_date_type),(O("hours")||L("toil"))&&(ne.request.from_date=ne.request.from_date&&n.from.time?ne.request.from_date+" "+n.from.time:null,ne.request.to_date=ne.request.to_date&&n.to.time?ne.request.to_date+" "+n.to.time:null)}function z(){ne.uiOptions.showBalance=ne.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function Q(){var e,n=ne.selectedAbsenceType.calculation_unit_name;return G(),e=n!==ne.selectedAbsenceType.calculation_unit_name,Y(),i.resolve().then(e&&H).then(e&&ne.onAbsenceTypeUpdateExtended).then(e&&V).then(y).then(E)}function J(e){return ne.absenceTypes=e,G(),n(ne.uiOptions.toDate).isAfter(ne.period.end_date)&&(ne.uiOptions.toDate=void 0,N("to")),Y(),E()}function K(e){var n=T(e).add(ne.uiOptions.time_interval,"minutes");n.isAfter(T(ne.uiOptions.times.to.max))||(ne.uiOptions.times.to.min=n.format("HH:mm"),n.isAfter(T(ne.uiOptions.times.to.time))&&(ne.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],ne=this;ne.canManage=!1,ne.calendar={},ne.errors=[],ne.isRequired=!0,ne.requestDayTypes=[],ne.statusNames=c.statusNames,ne.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},ne.pagination={currentPage:1,filteredbreakdown:ne.balance.change.breakdown,numPerPage:7,totalItems:ne.balance.change.breakdown.length,pageChanged:$},ne.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:r.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},ne.convertDateFormatFromServer=p,ne.convertDateToServerFormat=h,ne.dateChangeHandler=v,ne.dateTypeChangeHandler=b,ne.daysSelectionModeChangeHandler=g,ne.disableAndShowLoadingTimeInput=_,ne.getMomentDateWithGivenTime=T,ne.handleError=D,ne.isCalculationUnit=O,ne.isLeaveType=L,ne.isNotWorkingDay=S,ne.performBalanceChangeCalculation=E,ne.setRequestDateTimesAndDateTypes=V,ne.updateEndTimeInputMinTime=K,ne.$onDestroy=X,function(){t("RequestModalDetails"+e.capitalize(C(ne.leaveType,ne.request))+"Controller",{detailsController:ne}),ne.canManage=ne.isRole("manager")||ne.isRole("admin"),ne.loading.tab=!0,s.$emit("LeaveRequestPopup::addTab",ne),I(),ne.initChildController().then(function(){return i.all([x(),M()])}).then(!ne.isMode("create")&&R).then(H).then(function(){if(!ne.isMode("create"))return i.resolve().then(ne.initTimesExtended).then(V)}).then(!ne.isMode("create")&&W).then(w).then(Y).then(P).then(k).then(!ne.isMode("view")&&ne.initWatchersExtended).catch(D).finally(function(){ne.loading.tab=!1})}()}t.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l){function d(){return k.fileUploader&&k.fileUploader.queue.length>0}function m(){return k.getFilesAmount()0?R.map(function(e){return e.label}).join(", "):""}function q(){return k.request.loadAttachments().then(function(){o.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function C(){return a.all(R.map(function(e){return l.getMimeTypeFor(e.label).then(function(n){w[e.label]=n})})).catch(function(){w=null})}function T(){return c.valuesOf("safe_file_extension").then(function(e){R=e})}function A(e){return!e.attachment_id||k.canManage}function D(){e.forEach(I,function(e){e()})}function P(e,n){k.fileUploader.queue&&k.fileUploader.queue.length>0?k.fileUploader.uploadAll({entityID:k.request.id}).then(function(){n()}).catch(n):n()}t.debug("Component: leave-request-popup-files-tab");var R=[],I=[],w={},k=Object.create(this);return k.filesLoaded=!1,k.fileUploader=null,k.today=Date.now(),k.userDateFormatWithTime=i.DATE_FORMAT+" HH:mm",k.userDateFormat=i.DATE_FORMAT,k.$onDestroy=D,k.canRemoveAttachment=A,k.canSubmit=d,k.canUploadMore=m,k.formatDateTime=f,k.getAuthorName=p,k.getFilesAmount=h,k.listFileTypes=y,function(){o.$broadcast("LeaveRequestPopup::childComponent::register"),s.$emit("LeaveRequestPopup::addTab",k),g(),a.all([T(),q()]).then(_).finally(function(){k.filesLoaded=!0})}(),k}t.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function n(e,n,t){function a(e,t,a,o){n.openModal.apply(n,arguments)}e.debug("Component: leave-request-record-actions");var o,s=this;s.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],s.openLeavePopup=a,function(){o=t.parse(),o.openModal&&a(null,o.openModal,s.selectedContactId,s.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",n]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,n,t){function a(n,t,a,o,s,i,r,c,u,l,d,m){function f(e,n){n.data.push(e),n.dataIndex[e.id]=e}function p(){G.absenceTypes=G.absenceTypes.map(function(n){var t=e.find(G.entitlements,function(e){return e.type_id===n.id});return n.entitlement=t?t.value:0,n.remainder=t?t.remainder:{current:0,future:0},n})}function h(e){U(e),G.sections.other.open&&f(e,G.sections.other)}function v(){Object.values(G.sections).forEach(function(e){e.data=[]})}function b(){G.absenceTypesFiltered=G.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var n=Y[e.status];n?n(e.leaveRequest):G.refresh()}function _(n){n.dataIndex=e.indexBy(n.data,"id")}function y(e){return e.current?"Current Period ("+e.title+")":e.title}function q(){return s.all().then(function(n){G.absencePeriods=e.sortBy(n,"start_date"),G.selectedPeriod=e.find(G.absencePeriods,function(e){return!0===e.current})})}function C(){return i.all().then(i.loadCalculationUnits).then(function(n){G.absenceTypes=n,G.absenceTypesIndexed=e.indexBy(n,"id")})}function T(){return w("approved",{status_id:H(m.statusNames.approved)})}function A(){var n={contact_id:G.contactId,period_id:G.selectedPeriod.id};return t.all([c.balanceChangeByAbsenceType(e.assign({},n,{public_holiday:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{expired:!0})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.approved)]}})),c.balanceChangeByAbsenceType(e.assign({},n,{statuses:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}}))]).then(function(e){G.absenceTypes.forEach(function(n){n.balanceChanges={holidays:e[0][n.id],expired:e[1][n.id],approved:e[2][n.id],pending:e[3][n.id]}})})}function D(){return r.all({contact_id:G.contactId,period_id:G.selectedPeriod.id},!0).then(function(e){G.entitlements=e})}function P(){return r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id},G.entitlements).then(function(){return E(G.entitlements)}).then(function(e){G.sections.entitlements.data=e})}function R(){return t.all([r.breakdown({contact_id:G.contactId,period_id:G.selectedPeriod.id,expired:!0}),I({request_type:"toil",expired:!0})]).then(function(e){return t.all({expiredBalanceChangesFlatten:E(e[0]),expiredTOILS:B(e[1].list)})}).then(function(n){G.sections.expired.data=n.expiredBalanceChangesFlatten.concat(n.expiredTOILS),G.sections.expired.data=e.sortBy(G.sections.expired.data,"expiry_date")})}function I(n){return c.all(e.assign({contact_id:G.contactId,from_date:{from:G.selectedPeriod.start_date},to_date:{to:G.selectedPeriod.end_date},type_id:{IN:G.absenceTypes.map(function(e){return e.id})}},n),null,"from_date ASC",null,!1)}function w(e,n){return I(n).then(function(n){G.sections[e].data=n.list})}function k(){return t.all(Object.values(G.sections).filter(function(e){return e.open}).map(M))}function O(){return w("other",{status_id:{in:[H(m.statusNames.rejected),H(m.statusNames.cancelled)]}})}function L(){return w("pending",{status_id:{in:[H(m.statusNames.awaitingApproval),H(m.statusNames.moreInformationRequired)]}})}function S(){return w("holidays",{public_holiday:!0})}function M(e){return e.loading=!0,e.loadLeaveRequests().then(_.bind(this,e)).then(function(){e.loading=!1})}function x(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){G.leaveRequestStatuses=e.indexBy(n,"value")})}function $(){p(),b()}function E(n){return t.resolve().then(function(){return n.map(function(n){var t=e.find(G.entitlements,function(e){return e.id===n.id});return n.breakdown.map(function(n){return e.assign(e.clone(n),{type_id:t.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function B(n){return t.resolve().then(function(){return n.map(function(n){return e.assign({},n,{expiry_date:n.toil_expiry_date,amount:n.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function F(){l.subscribe("LeaveRequest::new",function(){G.refresh()}),l.subscribe("LeaveRequest::edit",function(){G.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){U(e)})}function U(n){e.forEach(G.sections,function(t,a){t.dataIndex[n.id]&&(e.remove(t.data,function(e){return e.id===n.id}),delete t.dataIndex[n.id],"other"!==a&&N(n,a))})}function N(n,t){var a=["future","current"],o=G.absenceTypesIndexed[n.type_id];"pending"===t&&e.pull(a,"current"),o.balanceChanges[t]-=n.balance_change,a.forEach(function(e){o.remainder[e]-=n.balance_change})}function j(){G.loading.content=!0,t.all([D(),A()]).then($).then(function(){G.loading.content=!1}).then(function(){return t.all([k(),v()])})}function W(e){var n=G.sections[e];n.open=!n.open,n.open&&!n.data.length&&M(n)}function H(n){return e.find(G.leaveRequestStatuses,function(e){ +return e.name===n}).value}n.debug("Component: staff-leave-report");var Y={delete:U,cancel:h},G=this;G.absencePeriods=[],G.absenceTypes=[],G.absenceTypesFiltered=[],G.absenceTypesIndexed={},G.dateFormat=d.DATE_FORMAT,G.leaveRequestStatuses={},G.selectedPeriod=null,G.role="absence-tab"===a.section?"admin":"staff",G.loading={content:!0,page:!0},G.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:P},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:R},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:S},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:L},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O}},G.labelPeriod=y,G.refresh=j,G.toggleSection=W,function(){t.all([x(),C(),q()]).then(function(){G.loading.page=!1}).then(function(){return t.all([D(),A()])}).then($).then(function(){G.loading.content=!1}),F()}()}t.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return i.request.calculateBalanceChange(i.selectedAbsenceType.calculation_unit_name)}function l(){var e=i.request,n=!!e.from_date&&!!e.to_date,t=i.selectedAbsenceType.calculation_unit_name;return"days"===t?n=n&&!!e.from_date_type&&!!e.to_date_type:"hours"===t&&(n=n&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),n}function d(){return i.canCalculateChange()}function m(n,t){var a=i.uiOptions.times[n],o=e.clone(t.time_from),s=e.clone(t.time_to);i.uiOptions.multipleDays||("from"===n&&s&&o&&(s=i.getMomentDateWithGivenTime(s).subtract(i.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===n&&o&&s&&(o=i.getMomentDateWithGivenTime(o).add(i.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=o||"00:00",a.max=s||"00:00",a.time="to"===n?a.max:a.min}function f(n,t){return n?(n=i.convertDateToServerFormat(n),v(n).then(function(t){return t?i.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(n,i.requestDayTypes).then(function(n){return n.length?n:i.requestDayTypes.filter(function(n){return e.includes(["all_day","half_day_am","half_day_pm"],n.name)})})}).then(function(e){return I(t,e),e})):o.reject([])}function p(e,t){return e=n(e),o.all([i.calendar.isNonWorkingDay(e),i.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?t.filter(function(n){return n.name===e}):[]})}function h(e,t){return n.duration(t).subtract(n.duration(e)).asHours()}function v(e){return c.all({public_holiday:1,contact_id:i.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return o.resolve()}function g(){return A(i.uiOptions.fromDate,"from").then(function(){return A(i.uiOptions.toDate,"to")})}function _(e){s.$watch(function(){return i.uiOptions.times[e].amount},function(e,n){i.isCalculationUnit("days")||+e==+n||(i.isRole("staff")&&(i.request.change_balance=!0),O(),i.performBalanceChangeCalculation())})}function y(e){var t=n(i.request[e+"_date"]).format("HH:mm"),a=i.uiOptions.times[e];(h(a.min,t)<=0||h(a.max,t)>=0)&&(t="from"===e?a.min:a.max),i.uiOptions.times[e].time=t}function q(){var e=i.uiOptions.multipleDays?["from","to"]:["from"],n=i.uiOptions.times;if(i.isCalculationUnit("hours"))return o.all(e.map(P)).then(function(){["from","to"].forEach(function(e){y(e),k(e),n[e].amount=Math.min(i.request[e+"_date_amount"],n[e].maxAmount).toString()}),i.uiOptions.multipleDays||i.updateEndTimeInputMinTime(i.uiOptions.times.from.time)}).then(O)}function C(){["from","to"].forEach(function(e){_(e),T(e)})}function T(e){s.$watch(function(){return i.uiOptions.times[e].time},function(n,t){i.isCalculationUnit("days")||n===t||(i.setRequestDateTimesAndDateTypes(),n&&k(e,!0))})}function A(e,n){return f(e,n).then(function(){i.loading[n+"DayTypes"]=!1})}function D(e){return A(i.uiOptions[e+"Date"],e).then(function(){if(i.isCalculationUnit("hours"))return P(e).then(function(){k(e,!0)})})}function P(e){var n=i.uiOptions[e+"Date"],t=!i.uiOptions.multipleDays;return n?i.request.getWorkDayForDate(i.convertDateToServerFormat(n)).then(function(n){S[e]=n,m(e,n),t&&"from"===e&&m("to",n)}).catch(function(n){return S[e]={},i.handleError(n)}).finally(function(){i.uiOptions.times[e].loading=!1,t&&(i.uiOptions.times.to.loading=!1)}):o.resolve()}function R(n){var t=i.uiOptions.times[n];i["request"+e.startCase(n)+"DayTypes"]=[],t.time="",t.min="00:00",t.max="00:00",t.amount="0",t.maxAmount="0"}function I(n,t){var a="request"+e.startCase(n)+"DayTypes";i[a]=t,i.isMode("create")&&(i.request[n+"_date_type"]=i[a][0].value)}function w(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?(i.disableAndShowLoadingTimeInput("from"),!i.uiOptions.multipleDays&&i.disableAndShowLoadingTimeInput("to"),P("from").then(function(){k("from",!0)})):o.resolve()}function k(e,n){var t=i.uiOptions,a=t.multipleDays?e:"from",o=t.times[a],s=t.multipleDays&&"to"===a?o.min:t.times.from.time,r=t.multipleDays&&"from"===a?o.max:t.times.to.time,c=S[a].number_of_hours?h(s,r).toString():"0";o.maxAmount=c,n&&(o.amount=o.maxAmount)}function O(){var e=i.uiOptions.times;i.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,i.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function L(){return i.isCalculationUnit("hours")&&i.uiOptions.fromDate?P("from").then(function(){k("from",!0)}):o.resolve()}var S={};a.debug("RequestModalDetailsLeaveController"),i.calculateBalanceChange=u,i.canCalculateChange=l,i.canSubmit=d,i.initChildController=b,i.initDayTypesExtended=g,i.initTimesExtended=q,i.initWatchersExtended=C,i.onAbsenceTypeUpdateExtended=L,i.onDateChangeExtended=D,i.resetUIInputsExtended=R,i.setDaysSelectionModeExtended=w}t.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,n){function t(n,t,a,o,s,i,r){function c(){return!(!r.canCalculateChange()||!r.request.sickness_reason)}function u(){return a.all([m(),h(),f(!0)])}function l(n){var t=r.request.getDocumentArray();return!!e.find(t,function(e){return e===n})}function d(n){return!!e.find(r.sicknessDocumentTypes,function(e){return e.value===n})}function m(){return i.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){r.sicknessDocumentTypes=e})}function f(n){return i.valuesOf("hrleaveandabsences_sickness_reason",n).then(function(n){r.sicknessReasons=e.indexBy(n,"name")})}function p(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){r.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}t.debug("RequestModalDetailsSicknessController"),n("RequestModalDetailsLeaveController",{detailsController:r}),r.canSubmit=c,r.initChildController=u,r.isChecked=l,r.isDocumentInRequest=d,r.openSicknessReasonOptionsEditor=p}n.controller("RequestModalDetailsSicknessController",t),t.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,n,t){function a(t,a,o,s,i,r,c){function u(){return c.balance.change.amount=+c.request.toil_to_accrue,a.resolve(c.balance.change)}function l(){if(!c.request.from_date||!c.request.to_date)return c.uiOptions.max_toil_duration_and_accrual=null,void(c.uiOptions.toil_duration_in_hours=null);c.uiOptions.max_toil_duration_and_accrual=n.duration(n(c.request.to_date).diff(c.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(c.errors=e),a.reject(e)}).then(function(e){return r.calculateToilExpiryDate(c.request.type_id,e)}).then(function(e){return c.request.toil_expiry_date=e,c.uiOptions.expiryDate=new Date(e),e})}function m(){return!!c.request.toil_to_accrue}function f(){var e=c.uiOptions.multipleDays&&!!c.request.to_date,n=!c.uiOptions.multipleDays&&!!c.request.from_date,t=n||e,a=N.from_date!==c.request.from_date||N.to_date!==c.request.to_date;return c.canDisplayToilExpirationField&&t&&W.hasExpirationFromAdminSettings&&a}function p(){return!!(c.request.from_date&&c.request.to_date&&c.request.toil_duration&&c.request.toil_to_accrue)}function h(){c.request.toil_expiry_date=!1,c.uiOptions.expiryDate=null}function v(){var e=c.uiOptions.multipleDays,n=c.request;return b({hasErrors:e?!n.to_date&&!n.from_date:!n.from_date,label:e?"To Date":"From Date",value:n.to_date})}function b(e){if(e.hasErrors){var t="Please select "+e.label+" to find expiry date";return a.reject([t])}return e.value?a.resolve(n(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=c.isMode("create")&&W.hasExpirationFromAdminSettings,n=W.hasPreviousExpirationDate,t=c.isLeaveType("toil"),a=c.canManage;c.canDisplayToilExpirationField=t&&(a||e||n)}function _(){c.uiOptions.toil_duration_in_hours=c.request.toil_duration/60}function y(){return W.hasPreviousExpirationDate=c.isMode("edit")&&!!c.request.toil_expiry_date,r.canExpire(c.request.type_id).then(function(e){W.hasExpirationFromAdminSettings=e})}function q(){return c.request.to_date_type=c.request.from_date_type="1",y().then(g).then(C).then(I)}function C(){c.canManage&&(c.uiOptions.expiryDate=c.convertDateFormatFromServer(c.request.toil_expiry_date))}function T(){o.$watch(function(){return c.request.toil_to_accrue},function(e,n){+e!=+n&&c.performBalanceChangeCalculation()})}function A(){o.$watch(function(){return c.uiOptions.toil_duration_in_hours},function(e,n){e!==n&&c.isCalculationUnit("hours")&&L(),c.request.toil_duration=c.uiOptions.toil_duration_in_hours?60*c.uiOptions.toil_duration_in_hours:null})}function D(){var e=c.uiOptions.times;e.from.time=n(c.request.from_date).format("HH:mm"),e.to.time=n(c.request.to_date).format("HH:mm"),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time)}function P(){["from","to"].forEach(function(e){o.$watch(function(){return c.uiOptions.times[e].time},function(e,n){e!==n&&(c.setRequestDateTimesAndDateTypes(),F(),l(),S())})})}function R(){c.isMode("view")||(T(),A(),P())}function I(n){return i.valuesOf("hrleaveandabsences_toil_amounts",n).then(function(n){c.toilAmounts=e.sortBy(n,function(e){return+e.weight})})}function w(){return l(),S(),F()}function k(){return x(),c.uiOptions.multipleDays||c.updateEndTimeInputMinTime(c.uiOptions.times.from.time),l(),j?j=!1:S(),F()}function O(e){c.uiOptions.times[e].time=""}function L(){c.request.toil_to_accrue=c.uiOptions.toil_duration_in_hours}function S(){c.uiOptions.toil_duration_in_hours=c.uiOptions.max_toil_duration_and_accrual}function M(){N=e.cloneDeep(c.request.attributes())}function x(){c.uiOptions.multipleDays?["from","to"].forEach(function(e){c.uiOptions.times[e].min="00:00",c.uiOptions.times[e].max="23:45"}):(c.uiOptions.times.from.min="00:00",c.uiOptions.times.from.max="23:30",c.uiOptions.times.to.min="00:15",c.uiOptions.times.to.max="23:45")}function $(){c.setRequestDateTimesAndDateTypes(),l(),S(),c.isCalculationUnit("hours")?L():c.request.toil_to_accrue=null}function E(){s.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){I(!1)})}function B(){c.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],o.section)}function F(){return f()?d().catch(a.resolve):a.resolve()}function U(){c.uiOptions.expiryDate&&(c.request.toil_expiry_date=c.convertDateToServerFormat(c.uiOptions.expiryDate))}t.debug("RequestModalDetailsToilController");var N,j=!c.isMode("create"),W={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};c.canDisplayToilExpirationField=!1,c.calculateBalanceChange=u,c.canCalculateChange=m,c.canSubmit=p,c.clearExpiryDate=h,c.initChildController=q,c.initTimesExtended=D,c.initWatchersExtended=R,c.onAbsenceTypeUpdateExtended=$,c.onDateChangeExtended=w,c.openToilInDaysAccrualOptionsEditor=E,c.resetUIInputsExtended=O,c.setDaysSelectionModeExtended=k,c.updateExpiryDate=U,function(){M(),x(),B(),!c.isMode("create")&&_()}()}t.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,n,t){"use strict";function a(t,a,o,s){function i(t){function i(){return o.all().then(function(e){return e.list})}function r(){return c().then(function(a){var o=a.filter(function(e){var a=e.info.details;return n(a.period_start_date).isSameOrBefore(t.selectedPeriod.end_date)&&(n(a.period_end_date).isSameOrAfter(t.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(o.map(function(e){return e.contact_id}))})}function c(){return d?a.resolve(d):s.all()}function u(){return o.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var n={department:e.get(t,"filters.userSettings.department.value",null),level_type:e.get(t,"filters.userSettings.level_type.value",null),location:e.get(t,"filters.userSettings.location.value",null),region:e.get(t,"filters.userSettings.region.value",null)},a=!!t.filters.userSettings.contact,o=e.isArray(t.lookupContacts)&&t.lookupContacts.length;return a?n.id={IN:[t.filters.userSettings.contact.id]}:o&&(n.id={IN:e.pluck(t.lookupContacts,"id")}),n}var d;return{loadAllLookUpContacts:i,loadContactIdsToReduceTo:r,loadFilteredContacts:u}}return t.debug("LeaveCalendarService"),{init:i}}t.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,t,a){return e.debug("AbsencePeriodInstance"),t.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var t=n();return e.current=!1,n(e.start_date).isSameOrBefore(t,"day")&&n(e.end_date).isSameOrAfter(t,"day")&&(e.current=!0),e},isInPeriod:function(e){var t=a.DATE_FORMAT.toUpperCase(),o=n(e,t);return n(this.start_date).isSameOrBefore(o)&&n(this.end_date).isSameOrAfter(o)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,n){return e.debug("AbsencePeriodAPI"),n.extend({all:function(n){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,n){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,t,a,o,s){return e.debug("AbsencePeriod"),t.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},current:function(){var e=n().format(s.serverDateFormat),t={start_date:{"<=":e},end_date:{">=":e}};return a.all(t).then(function(e){return e&&e.length?o.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,n){return e.debug("PublicHolidayAPI"),n.extend({all:function(n){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",n).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,n){return e.debug("PublicHolidayInstance"),n.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,n){"use strict";n.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(n,t,a,o,s){return n.debug("PublicHoliday"),t.extend({all:function(e){return n.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return o.init(e,!0)})})},isPublicHoliday:function(t){n.debug("PublicHoliday.isPublicHoliday",t);var o=e(t).format(s.serverDateFormat),i={date:o};return a.all(i).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},t.defaultCustomData(),n)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(n){var t=this.getDocumentArray(),a=t.indexOf(n);e.contains(t,n)?t.splice(a,1):t.push(n),this.sickness_required_documents=t.join(",")},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,n){"use strict";n.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(n,t){return t.extend({defaultCustomData:function(){var n={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},t.defaultCustomData(),n)},toAPIFilter:function(n,t,a){e.includes(["balance_change","dates","comments","files"],a)||(n[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,n,t,a){"use strict";function o(n,o,s,i,r,c,u,l,d,m,f,p,h,v,b,g,_,y,q,C,T){function A(e){"days"===xe.selectedAbsenceType.calculation_unit_name?delete xe.request[e+"_date_amount"]:delete xe.request[e+"_date_type"]}function D(){["from","to"].forEach(A)}function P(){var e=xe.requestStatuses[y.statusNames.awaitingApproval].value;we.status_id===e&&e!==xe.request.status_id&&d.publish("ManagerBadge:: Update Count")}function R(){return Me.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function I(){return Me.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function w(){return!xe.loading.entitlements&&(!!se("admin")||!ae("view")&&!(se("manager")&&!ae("create")))}function k(){var e=R();return xe.isMode("edit")&&(e=e&&(Y()||I())),xe.canManage&&xe.requestStatuses&&(e=e&&!!xe.getStatusFromValue(xe.newStatusOnSave)),(e=e&&!!xe.period.id)&&!xe.isMode("view")}function O(){xe.isSelfRecord?xe.request.status_id=xe.requestStatuses[y.statusNames.awaitingApproval].value:xe.canManage&&(xe.request.status_id=xe.newStatusOnSave||xe.request.status_id)}function L(){if(xe.isMode("edit")&&!xe.isRole("staff")&&"toil"!==N())return xe.request.calculateBalanceChange(xe.selectedAbsenceType.calculation_unit_name).then(function(e){if(+xe.balance.change.amount!=+e.amount)return T.promptBalanceChangeRecalculation().then(function(){s.$emit("LeaveRequestPopup::recalculateBalanceChange")}),o.reject()})}function S(){xe.errors=[]}function M(){return xe.request.create().then(Ce).then(function(){fe("LeaveRequest::new")})}function x(){ee()&&!xe.isRole("staff")&&(xe.request.change_balance=!0)}function $(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return xe.request.delete().then(function(){xe.dismissModal(),d.publish("LeaveRequest::delete",xe.request)})}})}function E(){r.dismiss({$value:"cancel"})}function B(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function F(){return U(xe.getStatusFromValue(xe.request.status_id).name)}function U(e){return t.map(Re[e],function(e){return xe.requestStatuses[e]})}function N(){return xe.request?xe.request.request_type:xe.leaveType||null}function j(){return!xe.request||e.equals({},xe.requestStatuses)?[]:xe.request.status_id?F():U("none")}function W(e){return t.find(xe.requestStatuses,function(n){return n.value===e})}function H(e){xe.errors=t.isArray(e)?e:[e],xe.loading.absenceTypes=!1,xe.submitting=!1}function Y(){return!e.equals(we,xe.request.attributes())||xe.canManage&&xe.newStatusOnSave}function G(){return xe.postContactSelection=!0,xe.staffMemberSelectionComplete=!1,xe.request.contact_id?o.resolve().then(re).then(ce).then(he).then(be).then(Z).then(z).then(xe.isMode("edit")?ge:t.noop).then(function(){xe.postContactSelection=!1,xe.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Le)return o.reject(e)}):o.reject("The contact id was not set")}function V(){var e=[y.statusNames.moreInformationRequired,y.statusNames.approved,y.statusNames.rejected,y.statusNames.cancelled];Re.none=[y.statusNames.moreInformationRequired,y.statusNames.approved],Re.awaiting_approval=e,Re.more_information_required=e,Re.rejected=e,Re.approved=e,Re.cancelled=[y.statusNames.awaitingApproval].concat(e)}function z(){return xe.canManage?f.find(xe.request.contact_id).then(function(e){xe.contactName=e.display_name}):o.resolve()}function X(){ke.push(s.$on("LeaveRequestPopup::requestObjectUpdated",ge),s.$on("LeaveRequestPopup::absencePeriodChanged",function(){ce().then(he).then(function(){s.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",xe.absenceTypes)})}),s.$on("LeaveRequestPopup::handleError",function(e,n){H(n)}),s.$on("LeaveRequestPopup::childComponent::register",function(){Ie++})),i.$on("$destroy",Te),i.$on("LeaveRequestPopup::addTab",function(e,n){Me.push(n)})}function Q(){var e,n;xe.request=xe.leaveRequest||null,e=N(),n=xe.initRequestAttributes(),"leave"===e?xe.request=_.init(n):"sickness"===e?xe.request=q.init(n):"toil"===e&&(xe.request=C.init(n))}function J(){var e={};return xe.request?e=xe.request.attributes():xe.canManage||(e={contact_id:Oe}),e}function K(){if(Se="staff","my-leave"!==s.section)return c(y.permissions.admin.administer).then(function(e){e&&(Se="admin")}).then(function(){return"staff"===Se&&c(y.permissions.ssp.manage).then(function(e){e&&(Se="manager")})}).finally(function(){xe.canManage=xe.isRole("manager")||xe.isRole("admin")})}function Z(){(xe.isRole("admin")||xe.isMode("create")&&xe.isRole("manager"))&&(xe.newStatusOnSave=xe.requestStatuses[y.statusNames.approved].value)}function ee(){return!xe.request.status_id||!t.includes(["cancelled","rejected"],W(xe.request.status_id).name)}function ne(e){var n=xe.getStatusFromValue(xe.request.status_id);return!!n&&n.name===e}function te(e){return xe.request&&xe.request.request_type===e}function ae(e){return xe.mode===e}function oe(e,n){var t=a(e.from_date),o=a(e.to_date);return t.isSameOrAfter(n.start_date,"day")&&o.isSameOrBefore(n.end_date,"day")}function se(e){return Se===e}function ie(){return h.all().then(function(e){xe.absencePeriods=e})}function re(){return v.all(B()).then(v.loadCalculationUnits).then(function(e){Pe={types:e,ids:e.map(function(e){return e.id})}})}function ce(){return xe.loading.entitlements=!0,b.all({contact_id:xe.request.contact_id,period_id:xe.period.id,type_id:{IN:Pe.ids}},!0).finally(function(){xe.loading.entitlements=!1})}function ue(){return p.get().then(function(e){Oe=e.contactId})}function le(){return xe.selectedContactId?f.find(xe.selectedContactId).then(function(e){xe.managedContacts=[e]}):xe.isRole("admin")?f.all().then(function(e){xe.managedContacts=t.remove(e.list,function(e){return e.id!==Oe})}):f.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){xe.managedContacts=e})}function de(){return u.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){xe.requestStatuses=t.indexBy(e,"name")})}function me(e,n){var a;return t.compact(e.map(function(e){if(a=t.find(n,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){P(),d.publish(e,xe.request),xe.errors=[],xe.dismissModal()}function pe(){["from","to"].forEach(function(e){xe.request[e+"_date"]=we[e+"_date"]})}function he(e){if(xe.absenceTypes=me(Pe.types,e),!xe.absenceTypes.length)return o.reject(Le)}function ve(){xe.period=t.find(xe.absencePeriods,function(e){return xe.isMode("create")?e.current:oe(xe.request,e)})}function be(){xe.isMode("create")?(xe.selectedAbsenceType=xe.absenceTypes[0],xe.request.type_id=xe.selectedAbsenceType.id):xe.selectedAbsenceType=t.find(xe.absenceTypes,function(e){return e.id===xe.request.type_id})}function ge(){we=e.copy(xe.request.attributes())}function _e(){var e;xe.request.id?(e=[xe.requestStatuses[y.statusNames.approved].value,xe.requestStatuses[y.statusNames.adminApproved].value,xe.requestStatuses[y.statusNames.rejected].value,xe.requestStatuses[y.statusNames.cancelled].value],xe.mode="edit",xe.isRole("staff")&&e.indexOf(xe.request.status_id)>-1&&(xe.mode="view")):xe.mode="create"}function ye(){var e=xe.request.status_id;if(!xe.isMode("view")&&!xe.submitting)return xe.submitting=!0,O(),D(),xe.request.isValid().then(ee()&&L).then(x).then(!xe.request.change_balance&&pe).then(qe).then(function(){return xe.isMode("edit")?De():M()}).catch(function(n){xe.request.status_id=e,n&&H(n)}).finally(function(){xe.submitting=!1})}function qe(){return o.all(Me.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function Ce(){function e(e){e&&t.push(e),++a===Ie&&(t.length>0?n.reject(t):n.resolve())}var n=o.defer(),t=[],a=0;return Ie>0?s.$broadcast("LeaveRequestPopup::submit",e):n.resolve(),n.promise}function Te(){ke.forEach(function(e){e()})}function Ae(){s.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function De(){return xe.request.update().then(Ce).then(function(){xe.isRole("manager")?fe("LeaveRequest::updatedByManager"):(xe.isRole("staff")||xe.isRole("admin"))&&fe("LeaveRequest::edit")})}n.debug("RequestCtrl");var Pe,Re={},Ie=0,we={},ke=[],Oe="",Le="No entitlement",Se="",Me=[],xe=t.assign(this,m);xe.absencePeriods=[],xe.absenceTypes=[],xe.canManage=!1,xe.contactName=null,xe.errors=[],xe.loading={absenceTypes:!0,entitlements:!0},xe.managedContacts=[],xe.mode="",xe.newStatusOnSave=null,xe.period={},xe.postContactSelection=!1,xe.requestStatuses={},xe.selectedAbsenceType={},xe.staffMemberSelectionComplete=!1,xe.submitting=!1,xe.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},xe.canChangeAbsenceType=w,xe.canSubmit=k,xe.closeAlert=S,xe.deleteLeaveRequest=$,xe.dismissModal=E,xe.getStatuses=j,xe.getStatusFromValue=W,xe.initAfterContactSelection=G,xe.initRequestAttributes=J,xe.isLeaveStatus=ne,xe.isLeaveType=te,xe.isMode=ae,xe.isRole=se,xe.submit=ye,xe.updateAbsenceType=Ae,function(){xe.loading.absenceTypes=!0,V(),X(),o.all([ue(),K(),ie(),de()]).then(Q).then(_e).then(ve).then(function(){return xe.canManage&&!xe.isMode("edit")&&le()}).then(function(){if(xe.selectedContactId&&(xe.request.contact_id=xe.selectedContactId),xe.request.contact_id)return xe.initAfterContactSelection()}).catch(H).finally(function(){xe.loading.absenceTypes=!1})}()}n.controller("RequestCtrl",o),o.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,n){"use strict";function t(e,n,t,a,o,s,i,r,c){function u(e){return r.get().then(function(n){return e.roleOf(n.contactId)}).then(function(e){return"none"!==e})}function l(e,t,o,i,r){a.open({appendTo:n.children().eq(0),templateUrl:s.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:t,leaveRequest:e,selectedContactId:o,isSelfRecord:i,forceRecalculateBalanceChange:r}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return c.find(e).then(function(e){return u(e).then(function(n){n?l(e,e.request_type,e.contact_id,"my-leave"===t.section):o.error("Error","You dont have permission to see this leave request")})}).catch(function(e){o.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}n.factory("LeavePopup",t),t.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/absence-tab/modules/components",["common/angular"],function(e){return e.module("absence-tab.components",[])}),function(e){define("leave-absences/absence-tab/components/absence-tab-container.component",["leave-absences/absence-tab/modules/components"],function(n){function t(n,t,a){n.debug("Component: absence-tab-container"),t.section="absence-tab",this.contactId=e.adminId,function(){a.getDateFormat()}()}n.component("absenceTabContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-container.html"}],controllerAs:"absence",controller:t}),t.$inject=["$log","$rootScope","DateFormat"]})}(CRM),define("leave-absences/absence-tab/components/absence-tab-entitlements.component",["common/lodash","leave-absences/absence-tab/modules/components"],function(e,n){function t(e,n,t){function a(){ +return t.all().then(t.loadCalculationUnits).then(function(e){o.absenceTypes=e})}n.debug("Component: absence-tab-entitlements");var o=this;o.absenceTypes=[],o.loading={component:!0},function(){a().finally(function(){o.loading.component=!1})}()}n.component("absenceTabEntitlements",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-entitlements.html"}],controllerAs:"entitlements",controller:t}),t.$inject=["$q","$log","AbsenceType"]}),define("leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component",["common/moment","leave-absences/absence-tab/modules/components"],function(e,n){function t(n,t,a,o,s,i,r){function c(e){m.errorMessage=e}function u(){return r.get({is_active:!0}).then(function(e){m.workPatterns=e})}function l(e){return s.valuesOf("hrleaveandabsences_work_pattern_change_reason",e).then(function(e){m.changeReasons=e})}function d(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_work_pattern_change_reason?reset=1").on("crmUnload",function(){l(!1)})}n.debug("Component: absence-tab-custom-work-pattern-modal");var m=Object.create(this);return m.changeReasons=[],m.errorMessage="",m.saveInProgress=!1,m.workPatterns=[],m.loading={content:!0},m.selected={workPattern:null,effectiveDate:null,changeReason:null},m.uiOptions={effectiveDate:{show:!1,options:{startingDay:1,showWeeks:!1}}},m.openWorkPatternChangeReasonEditor=d,function(){t.all([u(),l(!0)]).finally(function(){m.loading.content=!1})}(),m.closeModal=function(){m.dismiss({$value:"cancel"})},m.closeAlert=function(){m.errorMessage=""},m.save=function(){var n=e(m.selected.effectiveDate).format(i.serverDateFormat);return m.saveInProgress=!0,r.assignWorkPattern(m.contactId,m.selected.workPattern.id,n,null,m.selected.changeReason).then(function(){a.$broadcast("CustomWorkPattern::Added"),m.closeModal()}).catch(c).finally(function(){m.saveInProgress=!1})},m}n.component("absenceTabCustomWorkPatternModal",{bindings:{contactId:"<",dismiss:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-custom-work-pattern-modal.html"}],controllerAs:"workPatternModal",controller:["$log","$q","$rootScope","crmAngService","OptionGroup","shared-settings","WorkPatternAPI",t]})}),define("leave-absences/absence-tab/components/absence-tab-work-patterns.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","leave-absences/absence-tab/components/absence-tab-custom-work-pattern-modal.component"],function(e,n,t){function a(t,a,o,s,i,r,c,u,l,d){function m(){return d.workPatternsOf(g.contactId,{},!1).then(function(e){g.customWorkPatterns=e})}function f(){return d.default().then(function(e){g.defaultWorkPattern=e})}function p(){return l.valuesOf("hrleaveandabsences_work_pattern_change_reason").then(function(n){b=e.indexBy(n,"value")})}function h(e){var n=[m()];return e&&(n=n.concat(e)),g.loading.workPattern=!0,a.all(n).then(function(){v()}).finally(function(){g.loading.workPattern=!1})}function v(){var t,a=u.DATE_FORMAT.toUpperCase();g.customWorkPatterns=e(g.customWorkPatterns).map(function(e){return t=b[e.change_reason],e.change_reason_label=t?t.label:"",e.effective_date=e.effective_date?n(e.effective_date).format(a):"",e}).sortBy(function(e){return-n(e.effective_date,a).valueOf()}).value()}t.debug("Component: absence-tab-work-patterns");var b=[],g=Object.create(this);return g.customWorkPatterns=[],g.defaultWorkPattern=null,g.linkToWorkPatternListingPage=function(){var e=CRM.url("civicrm/contact/view",{cid:g.contactId,selectedChild:"absence"});return CRM.url("civicrm/admin/leaveandabsences/work_patterns",{cid:g.contactId,returnUrl:e})}(),g.loading={workPattern:!0},function(){h([p(),f(),c.getDateFormat()]),s.$on("CustomWorkPattern::Added",function(){h()})}(),g.deleteWorkPattern=function(e){r.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){d.unassignWorkPattern(e).then(function(){h()})}})},g.openModal=function(){i.open({appendTo:o.children().eq(0),template:'',controller:["$uibModalInstance",function(e){this.dismiss=e.dismiss}],controllerAs:"$ctrl"})},g}t.component("absenceTabWorkPatterns",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/absence-tab-work-patterns.html"}],controllerAs:"workpatterns",controller:["$log","$q","$rootElement","$rootScope","$uibModal","dialog","DateFormat","HR_settings","OptionGroup","WorkPattern",a]})}),define("leave-absences/absence-tab/components/annual-entitlement-change-log.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i){function r(){return l().then(function(e){q=q.concat(e)})}function c(){var n=e.groupBy(q,"created_date");C.changeLogRows=e.map(n,d).sort(function(e,n){return n.date.diff(e.date)})}function u(e,n){var t,a,o=m(e);e.entitlements.forEach(function(s,i){t=o.entitlements.slice(0,i),a=e.entitlements.slice(i+1),n(s,t,a)})}function l(){return o.all({contact_id:C.contactId,period_id:C.periodId},!1).then(function(e){return e.map(function(e){return{comment:e.comment,contact_id:e.contact_id,created_date:e.created_date,editor_id:e.editor_id,entitlement_amount:e.value,entitlement_id:e.id,"entitlement_id.type_id":e.type_id}})})}function d(t,a){var o,s,i;return s=e.indexBy(t,"entitlement_id.type_id"),i=C.absenceTypes.map(function(n){return o=s[n.id],e.extend({calculation_unit:n.calculation_unit_name},o)}),{date:n(a),entitlements:i}}function m(e){var n;return n=C.changeLogRows.indexOf(e),C.changeLogRows[n+1]||{date:e.date.clone(),entitlements:e.entitlements.map(function(){return{}})}}function f(){for(var n,t,a,o=C.changeLogRows.length-1;o>=0;o--)if(n=C.changeLogRows[o],t=e.pluck(n.entitlements,"comment"),a=e.compact(t),1===a.length){var s=e.findIndex(t,"length");n.highlightedEntitlement=n.entitlements[s]}else a.length>1&&_(o)}function p(e,n){C.changeLogRows.splice(n,0,e)}function h(){return t.all({id:C.periodId}).then(function(e){C.absencePeriod=e[0]})}function v(e){return a.all().then(a.loadCalculationUnits).then(function(e){C.absenceTypes=e})}function b(){return o.logs({contact_id:C.contactId,period_id:C.periodId}).then(function(e){q=e})}function g(){var e,n;if(!(C.changeLogRows.length<=1))for(e=C.changeLogRows.length-2,n=C.changeLogRows.length-1;e>=0;){var t=C.changeLogRows[e],a=C.changeLogRows[n];t.entitlements.forEach(function(e,n){var t=a.entitlements[n];e.comment===t.comment&&delete e.comment}),e--,n--}}function _(e){var n,t,a=C.changeLogRows[e];u(a,function(o,s,i){o.comment&&(n=s.concat(o).concat(i),t={date:a.date.clone(),entitlements:n},t.highlightedEntitlement=o,p(t,e++))}),y(e)}function y(e){C.changeLogRows.splice(e,1)}var q=[],C=this;C.absencePeriod=null,C.absenceTypes=[],C.changeLogRows=[],C.loading={component:!0},function(){h().then(v).then(b).then(r).then(c).then(g).then(f).finally(function(){C.loading.component=!1})}()}t.component("annualEntitlementChangeLog",{bindings:{contactId:"<",periodId:"<",dismissModal:"&"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlement-change-log.html"}],controllerAs:"changeLog",controller:a}),a.$inject=["AbsencePeriod","AbsenceType","Entitlement","OptionGroup","shared-settings"]}),function(e){define("leave-absences/absence-tab/components/annual-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contact"],function(n,t,a){function o(a,o,s,i,r,c,u,l,d){function m(){T.absencePeriods=n.chain(T.absencePeriods).filter(function(e){return n.find(q,function(n){return n.period_id===e.id})}).sortBy(function(e){return-t(e.start_date).valueOf()}).value()}function f(){T.absenceTypes=n.filter(T.absenceTypes,function(e){return n.find(q,function(n){return n.type_id===e.id})})}function p(n){var t=e.url("civicrm/contact/view",{cid:T.contactId,selectedChild:"absence"});return e.url("civicrm/admin/leaveandabsences/periods/manage_entitlements",{id:n,cid:T.contactId,returnUrl:t})}function h(){return c.all().then(function(e){T.absencePeriods=e})}function v(){var e=n.uniq(n.map(q,function(e){return e.editor_id}));return l.all({id:{IN:e}}).then(function(e){C=n.indexBy(e.list,"contact_id")})}function b(){return u.all({contact_id:T.contactId}).then(function(e){q=e})}function g(e){i.open({appendTo:s.children().eq(0),templateUrl:"annual-entitlement-change-log-modal",controller:["$uibModalInstance",function(n){this.contactId=T.contactId,this.dismiss=n.dismiss,this.periodId=e}],controllerAs:"modal"})}function _(){T.absencePeriods=n.map(T.absencePeriods,function(e){var t=n.map(T.absenceTypes,function(t){var a=n.find(q,function(n){return n.type_id===t.id&&n.period_id===e.id});return a?{amount:a.value,calculation_unit:t.calculation_unit_name,comment:a.comment?{message:a.comment,author_name:C[a.editor_id].display_name,date:a.created_date}:null}:null});return{id:e.id,title:e.title,entitlements:t}})}function y(e){var n=e.message+"

    Last updated:
    By: "+e.author_name+"
    Date: "+t.utc(e.date).local().format("DD/M/YYYY HH:mm")+"
    ";d.info("Calculation comment:",n)}a.debug("Component: annual-entitlements");var q=[],C=[],T=this;T.absencePeriods=[],T.loading={absencePeriods:!0},T.getEditEntitlementsPageURL=p,T.openAnnualEntitlementChangeLog=g,T.showComment=y,function(){b().then(v).then(h).then(m).then(f).then(_).finally(function(){T.loading.absencePeriods=!1})}()}a.component("annualEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/annual-entitlements.html"}],controllerAs:"entitlements",controller:o}),o.$inject=["$log","$q","$rootElement","$uibModal","AbsenceType","AbsencePeriod","Entitlement","Contact","notificationService"]})}(CRM),define("leave-absences/absence-tab/components/contract-entitlements.component",["common/lodash","common/moment","leave-absences/absence-tab/modules/components","common/models/contract"],function(e,n,t){function a(t,a,o,s,i,r){function c(){m.absenceTypes=e.filter(m.absenceTypes,function(n){return e.find(m.contracts,function(t){return e.find(t.info.leave,function(e){return e.leave_type===n.id})})})}function u(e){var t=o.DATE_FORMAT.toUpperCase();return e?n(e).format(t):""}function l(){return i.all({contact_id:m.contactId}).then(function(e){m.contracts=e})}function d(){m.contracts=e.sortBy(m.contracts,function(e){return n(e.info.details.period_start_date)}).map(function(n){var t=n.info,a=t.details,o=e.map(m.absenceTypes,function(n){var a=e.filter(t.leave,function(e){return e.leave_type===n.id})[0];return{amount:a?a.leave_amount:"",calculation_unit:n.calculation_unit_name}});return{position:a.position,start_date:u(a.period_start_date),end_date:u(a.period_end_date),absences:o}})}t.debug("Component: contract-entitlements");var m=this;m.contracts=[],m.loading={contracts:!0},function(){r.getDateFormat().then(l).then(c).then(d).finally(function(){m.loading.contracts=!1})}()}t.component("contractEntitlements",{bindings:{absenceTypes:"<",contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/contract-entitlements.html"}],controllerAs:"entitlements",controller:a}),a.$inject=["$log","$q","HR_settings","AbsenceType","Contract","DateFormat"]}),function(e){define("leave-absences/absence-tab/modules/settings",["common/angular"],function(n){return n.module("absence-tab.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.contactId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/absence-tab/"})})}(CRM),define("leave-absences/absence-tab/modules/config",["common/angular","leave-absences/absence-tab/modules/settings"],function(e){return e.module("absence-tab.config",["absence-tab.settings"]).config(["$resourceProvider","$httpProvider","$logProvider","settings",function(e,n,t,a){t.debugEnabled(a.debug),e.defaults.stripTrailingSlashes=!1,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}])}),define("leave-absences/absence-tab/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/modules/directives","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/work-pattern.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/absence-tab/components/absence-tab-container.component","leave-absences/absence-tab/components/absence-tab-entitlements.component","leave-absences/absence-tab/components/absence-tab-work-patterns.component","leave-absences/absence-tab/components/annual-entitlement-change-log.component","leave-absences/absence-tab/components/annual-entitlements.component","leave-absences/absence-tab/components/contract-entitlements.component","leave-absences/absence-tab/modules/config"],function(e){return e.module("absence-tab",["ngResource","ui.bootstrap","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.services","common.mocks","leave-absences.settings","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","absence-tab.config","absence-tab.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,n,t,a){e.debug("app.run"),n.sharedPathTpl=t.sharedPathTpl,n.settings=a}]),e}),function(e,n){var t=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";n.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":t+"/shared","leave-absences/absence-tab":t+"/absence-tab"}}),n(["leave-absences/shared/config"],function(){n(["leave-absences/absence-tab/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("absenceTabReady"):function(){var e=document.createEvent("Event");return e.initEvent("absenceTabReady",!0,!0),e}())})})}(CRM,require),define("absence-tab",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/absence-tab.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js index 48baef5a013..9a7adaf3e78 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,m),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),m.$$values=g,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(g))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,b=m.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(g,f(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,g)),d.promise.then(function(e){g[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){b.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,b[e].then(function(t){g[e]=t,--f||l()},c))}),f||l(),b[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function b(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function g(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var b,g,y;(u=c.exec(e))&&(b=i(u,!1),!(b.segment.indexOf("?")>=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),m.push(b.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,b={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,q);W(this,{id:e,type:a,location:o,array:g,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");g.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function L(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;aWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";L(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function E(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function L(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=L,X.contactsList=m,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired], -dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){ -u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0 -},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;sWhen All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(L(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";L(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){L(t())}function x(){L(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){E("previous"),E("next")}function L(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:J.month.days[J.month.days.length-1].date+" 23:59:59"},to_date:{from:J.month.days[0].date+" 00:00:00"},status_id:{IN:O()},contact_id:{IN:J.contacts.map(function(e){return e.id})},type_id:{IN:t?V:e.pluck(J.supportData.absenceTypes,"id")}};return g(),s.all(n,null,null,null,!1).then(function(e){return X={},t&&(e.list=_(e.list)),C(e.list)})}function E(){var t=J.month.days[0].date,n=J.month.days[J.month.days.length-1].date;return o.get(J.contacts.map(function(e){return e.id}),t,n).then(function(t){z=e.indexBy(t,"contact_id")})}function M(){return J.contactIdsToReduceTo&&(J.contacts=J.contacts.filter(function(t){return e.includes(J.contactIdsToReduceTo,t.contact_id)||e.find(X,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function L(t){var n=R(t);X[t.contact_id]=X[t.contact_id]||{},n.forEach(function(n){e.remove(X[t.contact_id][n.date],function(e){return e.id===t.id})})}function k(){r.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function j(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(t.date)})}),o.then(function(){return X[n]&&X[n][t.date]?X[n][t.date]:[]}).then(function(a){a=N(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:q(t,a)})})}function B(){return a.all(J.month.days.map(function(e){return a.all(J.contacts.map(function(t){return j(e,t.id)}))}))}function F(e,t){J.currentPage=0,J.visible=!0,(t||!Y)&&I()}function N(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(J.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function H(e){h(e),-1!==O().indexOf(e.status_id)&&c(e)}function W(e){return a.all(R(e).map(function(t){return j(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var V=[],Y=!1,G=[],z={},X={},J=this;J.currentPage=0,J.pageSize=20,J.visible=!1,J.showContactName=!!J.showContactName,J.showOnlyWithLeaveRequests=!!J.showOnlyWithLeaveRequests,J.$onDestroy=k,J.contactsList=m,J.getContactUrl=y,function(){var e=t().month(J.month.month).year(J.month.year);$(),A(),J.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function g(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0, +allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function b(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&b()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function L(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:L},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),E()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),g(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function b(e){return new Array(e||0)}function g(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:E(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:L(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function E(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function L(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=b,U.getLeaveStatusByValue=g,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){ +var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function L(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=L,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){E(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/absence-period.instance",["leave-absences/shared/modules/models-instances","common/moment","common/models/instances/instance","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriodInstance",["$log","ModelInstance","HR_settings",function(e,n,a){return e.debug("AbsencePeriodInstance"),n.extend({defaultCustomData:function(){return{current:!1}},transformAttributes:function(e){var n=t();return e.current=!1,t(e.start_date).isSameOrBefore(n,"day")&&t(e.end_date).isSameOrAfter(n,"day")&&(e.current=!0),e},isInPeriod:function(e){var n=a.DATE_FORMAT.toUpperCase(),r=t(e,n);return t(this.start_date).isSameOrBefore(r)&&t(this.end_date).isSameOrAfter(r)}})}])}),define("leave-absences/shared/apis/absence-period.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("AbsencePeriodAPI",["$log","api",function(e,t){return e.debug("AbsencePeriodAPI"),t.extend({all:function(t){return e.debug("AbsencePeriodAPI"),this.sendGET("AbsencePeriod","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/models/absence-period.model",["leave-absences/shared/modules/models","common/moment","leave-absences/shared/modules/shared-settings","leave-absences/shared/instances/absence-period.instance","leave-absences/shared/apis/absence-period.api","common/models/model","common/services/hr-settings"],function(e,t){"use strict";e.factory("AbsencePeriod",["$log","Model","AbsencePeriodAPI","AbsencePeriodInstance","shared-settings",function(e,n,a,r,o){return e.debug("AbsencePeriod"),n.extend({all:function(e){return a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},current:function(){var e=t().format(o.serverDateFormat),n={start_date:{"<=":e},end_date:{">=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,b,g,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function E(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function L(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Me.isMode("edit")?ge:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,b.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function be(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function ge(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():E()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl") +;var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Ee=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=L,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),function(e){define("leave-absences/admin-dashboard/modules/settings",["common/angular"],function(t){return t.module("admin-dashboard.settings",[]).constant("settings",{contactId:e.vars.leaveAndAbsences.loggedInUserId,debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/admin-dashboard/"})})}(CRM),define("leave-absences/admin-dashboard/modules/config",["common/angular","leave-absences/admin-dashboard/modules/settings"],function(e){return e.module("admin-dashboard.config",["admin-dashboard.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(e,t,n,a,r,o){var s={format:["DateFormat",function(e){return e.getDateFormat()}]};r.debugEnabled(o.debug),t.defaults.stripTrailingSlashes=!1,a.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",n.otherwise("/requests"),e.state("requests",{url:"/requests",template:'',resolve:s}).state("calendar",{url:"/calendar",template:'',resolve:s}).state("leave-balances",{url:"/leave-balances",template:"",resolve:s})}])}),define("leave-absences/admin-dashboard/modules/components",["common/angular"],function(e){return e.module("admin-dashboard.components",[])}),define("leave-absences/admin-dashboard/components/admin-dashboard-container",["leave-absences/admin-dashboard/modules/components"],function(e){function t(e,t){e.debug("Component: admin-dashboard-container"),t.section="admin-dashboard"}e.component("adminDashboardContainer",{templateUrl:["settings",function(e){return e.pathTpl+"components/admin-dashboard-container.html"}],controllerAs:"vm",controller:["$log","$rootScope",t]})}),define("leave-absences/admin-dashboard/app",["common/angular","common/angularBootstrap","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/admin-dashboard/modules/config","leave-absences/admin-dashboard/components/admin-dashboard-container"],function(e){return e.module("admin-dashboard",["ngAnimate","ngResource","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.mocks","leave-absences.components","leave-absences.controllers","leave-absences.settings","leave-absences.services","admin-dashboard.config","admin-dashboard.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/admin-dashboard":n+"/admin-dashboard"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/admin-dashboard/app"],function(){document.dispatchEvent("function"==typeof window.CustomEvent?new CustomEvent("adminDashboardReady"):function(){var e=document.createEvent("Event");return e.initEvent("adminDashboardReady",!0,!0),e}())})})}(CRM,require),define("admin-dashboard",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/admin-dashboard.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js index 4af0ecb1c82..0e9ca211976 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.min.js @@ -7,8 +7,8 @@ !function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[f]),c[r[f]]=e[r[f]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(b[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&m(u[e],e)}),v.push(n,e,r)}g.pop(),b[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],g=[],b={};return H(u,m),u=g=b=null,function(a,o,s){function i(){--y||(_||r(b,o.$$values),m.$$values=b,m.$$promises=m.$$promises||!0,delete m.$$inheritedValues,c.resolve(b))}function u(e){m.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),m=c.promise,g=m.$$promises={},b=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),m;o.$$inheritedValues&&r(b,f(o.$$inheritedValues,h)),W(g,o.$$promises),o.$$values?(_=r(b,f(o.$$values,h)),m.$$inheritedValues=f(o.$$values,h),i()):(o.$$inheritedValues&&(m.$$inheritedValues=f(o.$$inheritedValues,h)),o.then(i,u));for(var q=0,$=v.length;q<$;q+=3)a.hasOwnProperty(v[q])?i():function(n,r,o){function c(e){d.reject(e),u(e)}function l(){if(!j(m.$$failure))try{d.resolve(t.invoke(r,s,b)),d.promise.then(function(e){b[n]=e,i()},c)}catch(e){c(e)}}var d=e.defer(),f=0;H(o,function(e){g.hasOwnProperty(e)&&!a.hasOwnProperty(e)&&(f++,g[e].then(function(t){b[e]=t,--f||l()},c))}),f||l(),g[n]=d.promise}(v[q],v[q+1],v[q+2]);return m}},this.resolve=function(e,t,n,a){return this.study(e)(t,n,a)}}function g(e,t,n){this.fromConfig=function(e,t,n){return j(e.template)?this.fromString(e.template,t):j(e.templateUrl)?this.fromUrl(e.templateUrl,t):j(e.templateProvider)?this.fromProvider(e.templateProvider,t,n):null},this.fromString=function(e,t){return B(e)?e(t):e},this.fromUrl=function(n,a){return B(n)&&(n=n(a)),null==n?null:e.get(n,{cache:t,headers:{Accept:"text/html"}}).then(function(e){return e.data})},this.fromProvider=function(e,t,a){return n.invoke(e,null,a||{params:t})}}function b(e,t,r){function o(t,n,a,r){if(v.push(t),p[t])return p[t];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(t))throw new Error("Invalid parameter name '"+t+"' in pattern '"+e+"'");if(h[t])throw new Error("Duplicate parameter name '"+t+"' in pattern '"+e+"'");return h[t]=new G.Param(t,n,a,r),h[t]}function s(e,t,n,a){var r=["",""],o=e.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!t)return o;switch(n){case!1:r=["(",")"+(a?"?":"")];break;case!0:o=o.replace(/\/$/,""),r=["(?:/(",")|/)?"];break;default:r=["("+n+"|",")?"]}return o+r[0]+t+r[1]}function i(r,o){var s,i,u,c,l;return s=r[2]||r[3],l=t.params[s],u=e.substring(f,r.index),i=o?r[4]:r[4]||("*"==r[1]?".*":null),i&&(c=G.type(i)||a(G.type("string"),{pattern:new RegExp(i,t.caseInsensitive?"i":n)})),{id:s,regexp:i,segment:u,type:c,cfg:l}}t=W({params:{}},N(t)?t:{});var u,c=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,d="^",f=0,m=this.segments=[],p=r?r.params:{},h=this.params=r?r.params.$$new():new G.ParamSet,v=[];this.source=e;for(var g,b,y;(u=c.exec(e))&&(g=i(u,!1),!(g.segment.indexOf("?")>=0));)b=o(g.id,g.type,g.cfg,"path"),d+=s(g.segment,b.type.pattern.source,b.squash,b.isOptional),m.push(g.segment),f=c.lastIndex;y=e.substring(f);var _=y.indexOf("?");if(_>=0){var q=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,f+_),q.length>0)for(f=0;u=l.exec(q);)g=i(u,!0),b=o(g.id,g.type,g.cfg,"search"),f=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",m.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=m[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:f}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;$.length;){var e=$.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(g[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,f=!1,h=!0,v=!1,g={},q=!0,$=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(f=e),f},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new b(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(b.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return g[e];if(g.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return g[e]=new y(W({name:e},t)),n&&($.push({name:e,def:n}),q||c()),this},H(C,function(e,t){g[t]=new y(W({name:t},e))}),g=a(g,{}),this.$get=["$injector",function(e){return d=e,q=!1,c(),H(C,function(e,t){g[t]||(g[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(m(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function f(){return"{Param:"+e+" "+a+" squash: '"+q+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?g[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?g.any:g.string)}(r,a,o);var b=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=b?a.$asArray(b,"search"===o):a,"string"!==a.name||b||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,q=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),$=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),m(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,b,_,q);W(this,{id:e,type:a,location:o,array:b,squash:q,replace:$,isOptional:_,value:l,dynamic:n,config:r,toString:f})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return m(r,t.self);for(var o in R)B(R[o])&&(t[o]=R[o](t,R.$delegates[o]));return T[n]=t,!t[D]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){w.$current.navigable==t&&c(e,n)||w.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function b(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=w.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.$current=t,w.current=t.self,w.params=n,V(w.params,m),w.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),w.current)}).then(null,function(a){return a===P?R:w.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),R):(w.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},w.is=function(e,t,a){a=W({relative:w.$current},a||{});var r=f(e,a.relative);return j(r)?w.$current===r&&(!t||c(r.params.$$values(t),m)):n},w.includes=function(e,t,a){if(a=W({relative:w.$current},a||{}),F(e)&&b(e)){if(!y(e))return!1;e=w.$current.name}var r=f(e,a.relative);if(!j(r))return n;if(!j(w.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(f&&(f.remove(),f=null),p&&(p.$destroy(),p=null),m){var e=m.data("$uiViewAnim");b.leave(m,function(){e.$$animLeave.resolve(),f=null}),f=m,m=null}}function d(s){var d,f=P(n,c,i,r),y=f&&e.$current&&e.$current.locals[f];if(s||y!==h){d=n.$new(),h=e.$current.locals[f],d.$emit("$viewContentLoading",f);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),b.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(g)&&!g||n.$eval(g))&&a(e)}),l()});m=_,p=d,p.$emit("$viewContentLoaded",f),p.$eval(v)}}var f,m,p,h,v=c.onload||"",g=c.autoscroll,b=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=P(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var f=t.extend({},d);o[d.$$resolveAs]=f;var m=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=f),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}m(o)}}}}}function P(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function D(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function R(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function S(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function O(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function I(e,t){return{relative:R(e)||t.$current,inherit:!0}}function x(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=D(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=S(r),d=s[1]||s[0],f=null;c.options=W(I(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var m=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),f&&f(),d&&(f=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&m(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),m(),l.clickable&&(i=O(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){f.state=t[0],f.params=t[1],f.options=t[2],f.href=e.href(f.state,f.params,f.options),m&&m(),c&&(m=c.$$addStateInfo(f.state,f.params)),f.href&&r.$set(u.attr,f.href)}var i,u=S(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",f={state:null,params:null,options:null,href:null},m=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=O(a,e,t,u,function(){return f}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function M(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,R(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function E(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),g.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",g);var G;b.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new b(this.sourcePath+e+this.sourceSearch,W(n,t),this)},b.prototype.toString=function(){return this.source},b.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";E(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:S()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),$(e.list)})}function x(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=D(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function E(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&O()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==S().indexOf(e.status_id)&&c(e)}function H(e){return a.all(D(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=E,X.contactsList=m,X.getContactUrl=b,function(){var e=t().month(X.month.month).year(X.month.year);q(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}), -define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ +;return!0===t?0===m(a,s).length:o(a)}}this.encode=i(a(e,"encode")),this.decode=i(a(e,"decode")),this.is=i(a(e,"is"),!0),this.equals=function(e){return function(t,n){var a=r(t),o=r(n);if(a.length!==o.length)return!1;for(var s=0;s=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/components/leave-balance-tab-filters.component",["common/lodash","common/moment","leave-absences/shared/modules/components"],function(e,t,n){function a(n){function a(e){e.absencePeriods&&c.absencePeriods.length&&(c.filters.period_id=o().id),e.absenceTypes&&c.absenceTypes.length&&(c.filters.type_id=s().id),(e.loggedInContactId||e.userRole)&&(c.filters.managed_by="manager"===c.userRole?c.loggedInContactId:void 0),r()&&c.submitFilters()}function r(){return e.every(c.filters,function(e){return null!==e})}function o(){return e.find(c.absencePeriods,function(e){return e.current})||c.absencePeriods.reduce(function(e,n){return t(e.end_date).isAfter(n.end_date)?e:n})}function s(){return c.absenceTypes.reduce(function(e,t){return e.title.localeCompare(t.title)?e:t})}function i(e){return e.current?"Current Period ("+e.title+")":e.title}function u(){n.$emit("LeaveBalanceFilters::update",c.filters)}var c=this;c.filters={period_id:null,type_id:null,managed_by:null},c.$onChanges=a,c.labelPeriod=i,c.submitFilters=u}n.component("leaveBalanceTabFilters",{controller:a,controllerAs:"balanceFilters",bindings:{absencePeriods:"<",absenceTypes:"<",loggedInContactId:"<",lookupContacts:"<",userRole:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab-filters.html"}]}),a.$inject=["$scope"]}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/models/leave-balance-report.model",["leave-absences/shared/modules/models","leave-absences/shared/apis/entitlement.api","common/models/model"],function(e){"use strict";e.factory("LeaveBalanceReport",["Model","EntitlementAPI",function(e,t){return e.extend({all:function(e,n,a,r,o){return t.getLeaveBalances(this.processFilters(e),n,a,r,o)}})}])}),define("leave-absences/shared/components/leave-balance-tab.component",["common/angular","common/lodash","leave-absences/shared/modules/components","leave-absences/shared/components/leave-balance-tab-filters.component","leave-absences/shared/models/leave-balance-report.model","common/services/notification.service","common/services/pub-sub"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){return r.all({options:{sort:"title ASC"}}).then(function(e){T.absencePeriods=e})}function p(){return o.all().then(o.loadCalculationUnits).then(function(e){T.absenceTypes=e})}function h(){return s.all(null,null,"sort_name ASC").then(function(e){T.lookupContacts=e.list})}function v(){return n.all([m(),p(),h(),g(),q()]).catch(function(e){u.error("Error",e)})}function g(){return l.get().then(function(e){T.loggedInContactId=e.contactId})}function b(){return T.loading.report=!0,i.all(w,T.pagination,void 0,void 0,!1).then(function(e){T.report=y(e.list),T.reportCount=e.total}).catch(function(e){u.error("Error",e.error_message)}).finally(function(){T.loading.report=!1})}function y(n){return n.map(function(n){return n=e.copy(n),n.absence_types=t.indexBy(n.absence_types,function(e){return e.id}),n})}function _(){a.$on("LeaveBalanceFilters::update",C),c.subscribe("LeaveRequest::new",$)}function q(){return f(d.permissions.admin.administer).then(function(e){T.userRole=e?"admin":"manager"})}function $(e){C(e,w)}function C(e,t){w=t,T.pagination.page=1,A(),T.loadReportCurrentPage()}function A(){T.selectedAbsenceTypes=T.absenceTypes.filter(function(e){return+e.id==+w.type_id})}var w={},T=this;T.absencePeriods=[],T.absenceTypes=[],T.loading={component:!0,report:!0},T.loggedInContactId=null,T.lookupContacts=[],T.pagination={page:1,size:50},T.report=[],T.reportCount=0,T.userRole=null,T.loadReportCurrentPage=b,function(){_(),v().then(function(){T.loading.component=!1})}()}n.component("leaveBalanceTab",{controller:a,controllerAs:"leaveBalanceTab",templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-balance-tab.html"}]}),a.$inject=["$q","$rootScope","AbsencePeriod","AbsenceType","Contact","LeaveBalanceReport","notificationService","pubSub","Session","shared-settings","checkPermissions"]}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function f(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function m(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(P(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(E(),M(),O())})}function v(e){N.injectMonth=!0,j("injected").then(function(){O(e)}).then(function(){N.loading.calendar=!1})}function g(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function b(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(m).then(I)}function _(){return u.all().then(u.loadCalculationUnits)}function q(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function $(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function A(){return c.all()}function w(){return a.all([_(),A(),q()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function P(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function D(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&m(),I(),M(),S("month")}function R(e){var n="previous"===e?"subtract":"add";E(t(N.selectedMonth.moment)[n](1,"month")),M(),S("month")}function S(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&m).then("period"===t&&x).then("contacts"===t&&$).then("month"===t&&M).then(function(){v("contacts"===t)})}function O(e){o.$emit("LeaveCalendar::showMonth",!!e)}function I(){E(t())}function x(){E(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function M(){L("previous"),L("next")}function E(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=b,N.navigateToCurrentMonth=D,N.paginateMonth=R,N.refresh=S,function(){k().then(h).then(g).then(T).then(function(){return a.all([y(),$(),w(),N.showFilters?C():e.noop])}).then(function(){f(),v(),M()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:J.month.days[J.month.days.length-1].date+" 23:59:59"},to_date:{from:J.month.days[0].date+" 00:00:00"},status_id:{IN:O()},contact_id:{IN:J.contacts.map(function(e){return e.id})},type_id:{IN:t?V:e.pluck(J.supportData.absenceTypes,"id")}};return b(),s.all(n,null,null,null,!1).then(function(e){return X={},t&&(e.list=_(e.list)),C(e.list)})}function L(){var t=J.month.days[0].date,n=J.month.days[J.month.days.length-1].date;return o.get(J.contacts.map(function(e){return e.id}),t,n).then(function(t){z=e.indexBy(t,"contact_id")})}function M(){return J.contactIdsToReduceTo&&(J.contacts=J.contacts.filter(function(t){return e.includes(J.contactIdsToReduceTo,t.contact_id)||e.find(X,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=R(t);X[t.contact_id]=X[t.contact_id]||{},n.forEach(function(n){e.remove(X[t.contact_id][n.date],function(e){return e.id===t.id})})}function k(){r.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function j(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=f(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:P(t.date)})}),o.then(function(){return X[n]&&X[n][t.date]?X[n][t.date]:[]}).then(function(a){a=N(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:q(t,a)})})}function B(){return a.all(J.month.days.map(function(e){return a.all(J.contacts.map(function(t){return j(e,t.id)}))}))}function F(e,t){J.currentPage=0,J.visible=!0,(t||!Y)&&I()}function N(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(J.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function H(e){h(e),-1!==O().indexOf(e.status_id)&&c(e)}function W(e){return a.all(R(e).map(function(t){return j(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var V=[],Y=!1,G=[],z={},X={},J=this;J.currentPage=0,J.pageSize=20,J.visible=!1,J.showContactName=!!J.showContactName,J.showOnlyWithLeaveRequests=!!J.showOnlyWithLeaveRequests,J.$onDestroy=k,J.contactsList=m,J.getContactUrl=y,function(){var e=t().month(J.month.month).year(J.month.year);$(),A(),J.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month", +controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=q.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===q.leaveRequest.request_type?r.open(h(t)):m(t)}function d(){return"admin"===q.role&&"public_holiday"===q.leaveRequest.request_type}function f(n){var a=q.absenceTypes[q.leaveRequest.type_id].allow_request_cancelation;return"admin"===q.role||("manager"===q.role?e.includes([$.awaitingApproval,$.moreInformationRequired],n):"3"===a?t().isBefore(q.leaveRequest.from_date):"2"===a)}function m(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return q.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal(q.leaveRequest,q.leaveRequest.request_type,q.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray(q.leaveRequestStatuses)&&(q.leaveRequestStatuses=e.indexBy(q.leaveRequestStatuses,"value")),e.isArray(q.absenceTypes)&&(q.absenceTypes=e.indexBy(q.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return q.leaveRequest[e]().then(function(){g(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function g(t){var n=e.find(q.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:q.leaveRequest})}function b(){var t=q.leaveRequestStatuses[q.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!f(t)&&e.pull(n,"cancel"),"admin"!==q.role&&e.pull(n,"delete"),"staff"===q.role&&e.pull(n,"approve","reject"),"staff"!==q.role&&y(n),d()&&n.push("delete"),q.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,q=this,$=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[$.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[$.moreInformationRequired]},view:{label:"View",allowedStatuses:[$.approved,$.rejected,$.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[$.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.approved,$.rejected,$.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[$.awaitingApproval,$.moreInformationRequired,$.approved,$.rejected,$.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};q.allowedActions=[],q.action=l,q.openLeavePopup=v,function(){p(),b()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){q.request.comments.push({contact_id:_,leave_request_id:q.request.id,text:q.comment.text}),q.comment.text=""}function l(){return q.comment.text.length>0}function d(e){return!e.comment_id||q.canManage}function f(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function m(){return q.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":q.comment.contacts[e]?q.comment.contacts[e].display_name:void 0}function h(e){return q.mode===e}function v(){q.comment.text.length&&q.addComment()}function g(){var t=e.indexBy(q.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){q.comment.contacts=e.indexBy(t.list,"contact_id")})}function b(){return q.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),q.request.comments.length&&g()})}function y(){return q.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){q.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,q=this;q.loading={component:!0},q.comment={text:"",contacts:{}},q.addComment=c,q.canRemoveComment=d,q.canSubmit=l,q.formatDateTime=f,q.getActiveComments=m,q.getCommentorName=p,q.isMode=h,q.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",q),b(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,f){function m(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),O("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return q(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return M()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(w).finally(_)}function g(){return G(),k()}function b(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,O("hours")&&(te.uiOptions.times[e].loading=!1)})}function q(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function $(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function A(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(w)}function w(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():A()}function P(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function D(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function R(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function S(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function O(e){return te.selectedAbsenceType.calculation_unit_name===e}function I(e){return te.request.request_type===e}function x(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function M(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function E(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(w).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,m(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(I("sickness")||O("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(O("hours")||I("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:E},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=g,te.daysSelectionModeChangeHandler=b,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=w,te.isCalculationUnit=O,te.isLeaveType=I,te.isNotWorkingDay=x,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize($(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),D(),te.initChildController().then(function(){return s.all([M(),L()])}).then(!te.isMode("create")&&P).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(R).then(V).then(T).then(S).then(!te.isMode("view")&&te.initWatchersExtended).catch(w).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return S.fileUploader&&S.fileUploader.queue.length>0}function f(){return S.getFilesAmount()0?P.map(function(e){return e.label}).join(", "):""}function q(){return S.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function $(){return a.all(P.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){R[e.label]=t})})).catch(function(){R=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){P=e})}function A(e){return!e.attachment_id||S.canManage}function w(){e.forEach(D,function(e){e()})}function T(e,t){S.fileUploader.queue&&S.fileUploader.queue.length>0?S.fileUploader.uploadAll({entityID:S.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var P=[],D=[],R={},S=Object.create(this);return S.filesLoaded=!1,S.fileUploader=null,S.today=Date.now(),S.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",S.userDateFormat=s.DATE_FORMAT,S.$onDestroy=w,S.canRemoveAttachment=A,S.canSubmit=d,S.canUploadMore=f,S.formatDateTime=m,S.getAuthorName=p,S.getFilesAmount=h,S.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",S),b(),a.all([C(),q()]).then(y).finally(function(){S.filesLoaded=!0})}(),S}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/manage-leave-requests.component",["common/lodash","leave-absences/shared/modules/components","common/models/contact","common/services/pub-sub"],function(e,t){function n(t,n,a,r,o,s,i,u,c,l,d,f){"use strict";function m(){U.filters.leaveRequest.contact_id=null,U.refresh()}function p(){var e=U.filters.contact;return{department:e.department,level_type:e.level_type,location:e.location,region:e.region}}function h(e){return"all"===e.name||""===e?U.leaveRequests.filter.list.length:U.leaveRequests.filter.list.filter(function(t){return t.status_id===e.value}).length}function v(t){return e.find(U.absenceTypes,{id:t})}function g(e){return new Array(e||0)}function b(t){var n=e.find(U.leaveRequestStatuses,function(e){return e.value===t});return n?n.label:null}function y(e){switch(e){case i.statusNames.approved:return"badge-success";case i.statusNames.rejected:return"badge-danger";case i.statusNames.cancelled:case"all":return"";default:return"badge-primary"}}function _(t){return e.find(U.leaveRequestStatuses,function(e){return e.name===t}).value}function q(t){var n=e.find(U.filteredUsers,function(e){return e.id===t});return n?n.display_name:null}function $(e){return e.current?"Current Period ("+e.title+")":e.title}function C(){return u.all().then(function(t){U.absencePeriods=e.sortBy(t,"start_date"),U.filters.leaveRequest.selectedPeriod=e.find(U.absencePeriods,function(e){return!!e.current})})}function A(){return c.all().then(c.loadCalculationUnits).then(function(e){U.absenceTypes=e})}function w(e){return(U.isAdmin?r.all(p()):r.leaveManagees(U.contactId,p())).then(function(t){return U.filteredUsers=U.isAdmin?t.list:t,e?P(e):n.all([P("table"),P("filter")])}).then(function(){U.filters.leaveRequest.leaveStatus!==H&&0===U.leaveRequests.table.list.length&&U.refresh(1,!0)})}function T(){return s.valuesOf("hrjc_department").then(function(e){U.departments=e})}function P(e){var t="filter"!==e,n="table"===e?e:"content",a="filter"===e?{size:0}:U.pagination,r="filter"===e?{return:["status_id"]}:{};return U.loading[n]=!0,l.all(S(t),a,"from_date DESC",r,!1).then(function(t){U.leaveRequests[e]=t}).catch(function(){U.leaveRequests[e].list=[]}).finally(function(){U.loading[n]=!1})}function D(){return s.valuesOf("hrjc_level_type").then(function(e){U.levelTypes=e})}function R(){return s.valuesOf("hrjc_location").then(function(e){U.locations=e})}function S(t){var n=U.filters.leaveRequest;return{contact_id:L(),managed_by:U.isAdmin&&"me"!==n.assignedTo.type?void 0:U.contactId,status_id:E(t),type_id:n.selectedAbsenceTypes?n.selectedAbsenceTypes.id:{IN:e.pluck(U.absenceTypes,"id")},from_date:{from:n.selectedPeriod.start_date},to_date:{to:n.selectedPeriod.end_date},unassigned:"unassigned"===n.assignedTo.type||void 0}}function O(){return s.valuesOf("hrjc_region").then(function(e){U.regions=e})}function I(){return s.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){U.leaveRequestStatuses=e.concat(U.leaveRequestStatuses)})}function x(e,t,n,a){d.openModal.apply(d,arguments)}function L(){return U.filteredUsers.length>0&&U.filters.leaveRequest.contact_id?U.filters.leaveRequest.contact_id:{IN:U.filteredUsers.map(function(e){return e.id})}}function M(e){var t=[_(i.statusNames.moreInformationRequired),_(i.statusNames.awaitingApproval)];return 0===e.length&&(e=e.concat(t)),e}function E(e){var t=U.filters.leaveRequest,n=[];if(e&&t.leaveStatus&&t.leaveStatus.value&&n.push(t.leaveStatus.value),t.pending_requests&&(n=M(n)),n.length)return{IN:n}}function k(e,t,n){e="number"==typeof e?e:1,t&&(U.filters.leaveRequest.leaveStatus=H),(e<=U.totalNoOfPages()||0===U.totalNoOfPages())&&(U.pagination.page=e,w(n))}function j(e){U.filters.leaveRequest.leaveStatus=e,U.refresh(1,!1,"table")}function B(e){U.filters.leaveRequest.assignedTo=e,U.refresh()}function F(){f.subscribe("LeaveRequest::updatedByManager",function(){U.refresh()}),f.subscribe("LeaveRequest::new",function(){U.refresh()}),f.subscribe("LeaveRequest::edit",function(){U.refresh()}),f.subscribe("LeaveRequest::delete",function(){U.refresh()}),f.subscribe("LeaveRequest::statusUpdate",function(){U.refresh()})}function N(){return Math.ceil(U.leaveRequests.table.total/U.pagination.size)}t.debug("Component: manage-leave-requests");var U=this,H={name:"all",label:"All"};U.absencePeriods=[],U.absenceTypes=[],U.filteredUsers=[],U.isFilterExpanded=!1,U.isAdmin=!1,U.leaveRequests={table:{list:[]},filter:{list:[]}},U.leaveRequestStatuses=[H],U.loading={content:!0,page:!0,table:!0},U.pagination={page:1,size:7},U.filtersByAssignee=[{type:"me",label:"Assigned To Me"},{type:"unassigned",label:"Unassigned"},{type:"all",label:"All"}],U.filters={contact:{department:null,level_type:null,location:null,region:null},leaveRequest:{leaveStatus:U.leaveRequestStatuses[0],pending_requests:!0,contact_id:null,selectedPeriod:null,selectedAbsenceTypes:null,assignedTo:U.filtersByAssignee[0]}},U.clearStaffSelection=m,U.countLeaveRequestByStatus=h,U.getAbsenceTypeByID=v,U.getArrayOfSize=g,U.getLeaveStatusByValue=b,U.getNavBadge=y,U.getUserNameByID=q,U.labelPeriod=$,U.openLeavePopup=x,U.refresh=k,U.refreshWithFilter=j,U.refreshWithFilterByAssignee=B,U.totalNoOfPages=N,function(){o(i.permissions.admin.administer).then(function(e){U.isAdmin=e,n.all([C(),A(),O(),T(),R(),D(),I()]).then(function(){U.loading.page=!1,w()}),F()})}()}t.component("manageLeaveRequests",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/manage-leave-requests.html"}],controllerAs:"vm",controller:n}),n.$inject=["$log","$q","$rootScope","Contact","checkPermissions","OptionGroup","shared-settings","AbsencePeriod","AbsenceType","LeaveRequest","LeavePopup","pubSub"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function f(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function m(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return D(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function g(){return r.resolve()}function b(){return A(s.uiOptions.fromDate,"from").then(function(){return A(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),O(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function q(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),S(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(O)}function $(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&S(e,!0))})}function A(e,t){return m(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function w(e){return A(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){S(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){x[e]=t,f(e,t),n&&"from"===e&&f("to",t)}).catch(function(t){return x[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function P(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function D(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function R(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){S("from",!0)})):r.resolve()}function S(e,t){ var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=x[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function O(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function I(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){S("from",!0)}):r.resolve()}var x={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=g,s.initDayTypesExtended=b,s.initTimesExtended=q,s.initWatchersExtended=$,s.onAbsenceTypeUpdateExtended=I,s.onDateChangeExtended=w,s.resetUIInputsExtended=P,s.setDaysSelectionModeExtended=R}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([f(),h(),m(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function f(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function m(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){m(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function f(){return!!u.request.toil_to_accrue}function m(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return g({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function g(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function b(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function q(){return u.request.to_date_type=u.request.from_date_type="1",_().then(b).then($).then(D)}function $(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function A(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&I(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function w(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),x())})})}function P(){u.isMode("view")||(C(),A(),T())}function D(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function R(){return l(),x(),B()}function S(){return M(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:x(),B()}function O(e){u.uiOptions.times[e].time=""}function I(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function x(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function M(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function E(){u.setRequestDateTimesAndDateTypes(),l(),x(),u.isCalculationUnit("hours")?I():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){D(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return m()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=f,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=q,u.initTimesExtended=w,u.initWatchersExtended=P,u.onAbsenceTypeUpdateExtended=E,u.onDateChangeExtended=R,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=O,u.setDaysSelectionModeExtended=S,u.updateExpiryDate=F,function(){L(),M(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function f(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function m(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,m(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,m(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),f.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,f,m,p,h,v,g,b,y,_,q,$,C){function A(e){"days"===Me.selectedAbsenceType.calculation_unit_name?delete Me.request[e+"_date_amount"]:delete Me.request[e+"_date_type"]}function w(){["from","to"].forEach(A)}function T(){var e=Me.requestStatuses[_.statusNames.awaitingApproval].value;Re.status_id===e&&e!==Me.request.status_id&&d.publish("ManagerBadge:: Update Count")}function P(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function D(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function R(){return!Me.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function S(){var e=P();return Me.isMode("edit")&&(e=e&&(V()||D())),Me.canManage&&Me.requestStatuses&&(e=e&&!!Me.getStatusFromValue(Me.newStatusOnSave)),(e=e&&!!Me.period.id)&&!Me.isMode("view")}function O(){Me.isSelfRecord?Me.request.status_id=Me.requestStatuses[_.statusNames.awaitingApproval].value:Me.canManage&&(Me.request.status_id=Me.newStatusOnSave||Me.request.status_id)}function I(){if(Me.isMode("edit")&&!Me.isRole("staff")&&"toil"!==N())return Me.request.calculateBalanceChange(Me.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Me.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function x(){Me.errors=[]}function L(){return Me.request.create().then($e).then(function(){me("LeaveRequest::new")})}function M(){ee()&&!Me.isRole("staff")&&(Me.request.change_balance=!0)}function E(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Me.request.delete().then(function(){Me.dismissModal(),d.publish("LeaveRequest::delete",Me.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Me.getStatusFromValue(Me.request.status_id).name)}function F(e){return n.map(Pe[e],function(e){return Me.requestStatuses[e]})}function N(){return Me.request?Me.request.request_type:Me.leaveType||null}function U(){return!Me.request||e.equals({},Me.requestStatuses)?[]:Me.request.status_id?B():F("none")}function H(e){return n.find(Me.requestStatuses,function(t){return t.value===e})}function W(e){Me.errors=n.isArray(e)?e:[e],Me.loading.absenceTypes=!1,Me.submitting=!1}function V(){return!e.equals(Re,Me.request.attributes())||Me.canManage&&Me.newStatusOnSave}function Y(){return Me.postContactSelection=!0,Me.staffMemberSelectionComplete=!1,Me.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(ge).then(Z).then(z).then(Me.isMode("edit")?be:n.noop).then(function(){Me.postContactSelection=!1,Me.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==Ie)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];Pe.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],Pe.awaiting_approval=e,Pe.more_information_required=e,Pe.rejected=e,Pe.approved=e,Pe.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Me.canManage?m.find(Me.request.contact_id).then(function(e){Me.contactName=e.display_name}):r.resolve()}function X(){Se.push(o.$on("LeaveRequestPopup::requestObjectUpdated",be),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Me.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){De++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Me.request=Me.leaveRequest||null,e=N(),t=Me.initRequestAttributes(),"leave"===e?Me.request=y.init(t):"sickness"===e?Me.request=q.init(t):"toil"===e&&(Me.request=$.init(t))}function K(){var e={};return Me.request?e=Me.request.attributes():Me.canManage||(e={contact_id:Oe}),e}function Q(){if(xe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(xe="admin")}).then(function(){return"staff"===xe&&u(_.permissions.ssp.manage).then(function(e){e&&(xe="manager")})}).finally(function(){Me.canManage=Me.isRole("manager")||Me.isRole("admin")})}function Z(){(Me.isRole("admin")||Me.isMode("create")&&Me.isRole("manager"))&&(Me.newStatusOnSave=Me.requestStatuses[_.statusNames.approved].value)}function ee(){return!Me.request.status_id||!n.includes(["cancelled","rejected"],H(Me.request.status_id).name)}function te(e){var t=Me.getStatusFromValue(Me.request.status_id);return!!t&&t.name===e}function ne(e){return Me.request&&Me.request.request_type===e}function ae(e){return Me.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return xe===e}function se(){return h.all().then(function(e){Me.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Me.loading.entitlements=!0,g.all({contact_id:Me.request.contact_id,period_id:Me.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Me.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Oe=e.contactId})}function le(){return Me.selectedContactId?m.find(Me.selectedContactId).then(function(e){Me.managedContacts=[e]}):Me.isRole("admin")?m.all().then(function(e){Me.managedContacts=n.remove(e.list,function(e){return e.id!==Oe})}):m.find(Oe).then(function(e){return e.leaveManagees()}).then(function(e){Me.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Me.requestStatuses=n.indexBy(e,"name")})}function fe(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function me(e){T(),d.publish(e,Me.request),Me.errors=[],Me.dismissModal()}function pe(){["from","to"].forEach(function(e){Me.request[e+"_date"]=Re[e+"_date"]})}function he(e){if(Me.absenceTypes=fe(Te.types,e),!Me.absenceTypes.length)return r.reject(Ie)}function ve(){Me.period=n.find(Me.absencePeriods,function(e){return Me.isMode("create")?e.current:re(Me.request,e)})}function ge(){Me.isMode("create")?(Me.selectedAbsenceType=Me.absenceTypes[0],Me.request.type_id=Me.selectedAbsenceType.id):Me.selectedAbsenceType=n.find(Me.absenceTypes,function(e){return e.id===Me.request.type_id})}function be(){Re=e.copy(Me.request.attributes())}function ye(){var e;Me.request.id?(e=[Me.requestStatuses[_.statusNames.approved].value,Me.requestStatuses[_.statusNames.adminApproved].value,Me.requestStatuses[_.statusNames.rejected].value,Me.requestStatuses[_.statusNames.cancelled].value],Me.mode="edit",Me.isRole("staff")&&e.indexOf(Me.request.status_id)>-1&&(Me.mode="view")):Me.mode="create"}function _e(){var e=Me.request.status_id;if(!Me.isMode("view")&&!Me.submitting)return Me.submitting=!0,O(),w(),Me.request.isValid().then(ee()&&I).then(M).then(!Me.request.change_balance&&pe).then(qe).then(function(){return Me.isMode("edit")?we():L()}).catch(function(t){Me.request.status_id=e,t&&W(t)}).finally(function(){Me.submitting=!1})}function qe(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function $e(){function e(e){e&&n.push(e),++a===De&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return De>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Se.forEach(function(e){e()})}function Ae(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function we(){return Me.request.update().then($e).then(function(){Me.isRole("manager")?me("LeaveRequest::updatedByManager"):(Me.isRole("staff")||Me.isRole("admin"))&&me("LeaveRequest::edit")})}t.debug("RequestCtrl") ;var Te,Pe={},De=0,Re={},Se=[],Oe="",Ie="No entitlement",xe="",Le=[],Me=n.assign(this,f);Me.absencePeriods=[],Me.absenceTypes=[],Me.canManage=!1,Me.contactName=null,Me.errors=[],Me.loading={absenceTypes:!0,entitlements:!0},Me.managedContacts=[],Me.mode="",Me.newStatusOnSave=null,Me.period={},Me.postContactSelection=!1,Me.requestStatuses={},Me.selectedAbsenceType={},Me.staffMemberSelectionComplete=!1,Me.submitting=!1,Me.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Me.canChangeAbsenceType=R,Me.canSubmit=S,Me.closeAlert=x,Me.deleteLeaveRequest=E,Me.dismissModal=k,Me.getStatuses=U,Me.getStatusFromValue=H,Me.initAfterContactSelection=Y,Me.initRequestAttributes=K,Me.isLeaveStatus=te,Me.isLeaveType=ne,Me.isMode=ae,Me.isRole=oe,Me.submit=_e,Me.updateAbsenceType=Ae,function(){Me.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Me.canManage&&!Me.isMode("edit")&&le()}).then(function(){if(Me.selectedContactId&&(Me.request.contact_id=Me.selectedContactId),Me.request.contact_id)return Me.initAfterContactSelection()}).catch(W).finally(function(){Me.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/manager-leave/modules/components",["common/angular"],function(e){return e.module("manager-leave.components",[])}),define("leave-absences/manager-leave/components/manager-leave-container",["leave-absences/manager-leave/modules/components"],function(e){e.component("managerLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/manager-leave-container.html"}],controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: manager-leave-container"),t.section="manager-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}],controllerAs:"managerLeave"})}),function(e){define("leave-absences/manager-leave/modules/settings",["common/angular"],function(t){return t.module("manager-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/manager-leave/"})})}(CRM),function(e){define("leave-absences/manager-leave/modules/config",["common/angular","leave-absences/manager-leave/modules/settings"],function(t){return t.module("manager-leave.config",["manager-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/manager-leave/requests"),t.state("manager-leave",{abstract:!0,url:"/manager-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("manager-leave.requests",{url:"/requests?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("manager-leave.calendar",{url:"/calendar",template:''}).state("manager-leave.leave-balances",{url:"/leave-balances",template:""})}])})}(CRM),define("leave-absences/manager-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/modules/dialog","common/services/angular-date/date-format","common/services/check-permissions","common/services/crm-ang.service","leave-absences/shared/ui-router","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/components/leave-balance-tab.component","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/manage-leave-requests.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/manager-leave/components/manager-leave-container","leave-absences/manager-leave/modules/config"],function(e){return e.module("manager-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","ui.select","textAngular","common.angularDate","common.dialog","common.filters","common.models","common.directives","common.mocks","leave-absences.models","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","manager-leave.config","manager-leave.components"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/manager-leave":n+"/manager-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/manager-leave/app","leave-absences/shared/models/leave-request.model"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-manager-leave]"),["manager-leave"])})})}(CRM,require),define("manager-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/manager-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js index 83c82605850..3835a898bf9 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.min.js @@ -6,9 +6,9 @@ */ -!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[P]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=L[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function P(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=P(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function L(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function E(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),E(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),E(),R("month")}function S(e){var n="previous"===e?"subtract":"add";M(t(N.selectedMonth.moment)[n](1,"month")),E(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&E).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function L(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function E(){L("previous"),L("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride -}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),E()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:X.month.days[X.month.days.length-1].date+" 23:59:59"},to_date:{from:X.month.days[0].date+" 00:00:00"},status_id:{IN:R()},contact_id:{IN:X.contacts.map(function(e){return e.id})},type_id:{IN:t?W:e.pluck(X.supportData.absenceTypes,"id")}};return s.all(n,null,null,null,!1).then(function(e){return z={},t&&(e.list=y(e.list)),q(e.list)})}function O(){var t=X.month.days[0].date,n=X.month.days[X.month.days.length-1].date;return o.get(X.contacts.map(function(e){return e.id}),t,n).then(function(t){G=e.indexBy(t,"contact_id")})}function L(){return X.contactIdsToReduceTo&&(X.contacts=X.contacts.filter(function(t){return e.includes(X.contactIdsToReduceTo,t.contact_id)||e.find(z,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function E(t){var n=P(t);z[t.contact_id]=z[t.contact_id]||{},n.forEach(function(n){e.remove(z[t.contact_id][n.date],function(e){return e.id===t.id})})}function M(){r.$emit("LeaveCalendar::monthDestroyed"),Y.map(function(e){e.remove?e.remove():e()})}function k(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:T(t.date)})}),o.then(function(){return z[n]&&z[n][t.date]?z[n][t.date]:[]}).then(function(a){a=F(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:_(t,a)})})}function j(){return a.all(X.month.days.map(function(e){return a.all(X.contacts.map(function(t){return k(e,t.id)}))}))}function B(e,t){X.currentPage=0,X.visible=!0,(t||!V)&&I()}function F(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(w("half_day_pm",e,e.from_date)?1:0)})}function N(t){var n=e.find(X.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function U(e){h(e),-1!==R().indexOf(e.status_id)&&c(e)}function H(e){return a.all(P(e).map(function(t){return k(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var W=[],V=!1,Y=[],G={},z={},X=this;X.currentPage=0,X.pageSize=20,X.visible=!1,X.showContactName=!!X.showContactName,X.showOnlyWithLeaveRequests=!!X.showOnlyWithLeaveRequests,X.$onDestroy=M,X.contactsList=f,X.getContactUrl=g,function(){var e=t().month(X.month.month).year(X.month.year);$(),C(),X.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return E()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function L(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function E(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([E(),L()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})}function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id} -;return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(L))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function L(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function E(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&L(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([E(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return E(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function L(){N=e.cloneDeep(u.request.attributes())}function E(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){L(),E(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Ee.selectedAbsenceType.calculation_unit_name?delete Ee.request[e+"_date_amount"]:delete Ee.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Ee.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Ee.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Le.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Le.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Ee.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Ee.isMode("edit")&&(e=e&&(V()||P())),Ee.canManage&&Ee.requestStatuses&&(e=e&&!!Ee.getStatusFromValue(Ee.newStatusOnSave)),(e=e&&!!Ee.period.id)&&!Ee.isMode("view")}function I(){Ee.isSelfRecord?Ee.request.status_id=Ee.requestStatuses[_.statusNames.awaitingApproval].value:Ee.canManage&&(Ee.request.status_id=Ee.newStatusOnSave||Ee.request.status_id)}function x(){if(Ee.isMode("edit")&&!Ee.isRole("staff")&&"toil"!==N())return Ee.request.calculateBalanceChange(Ee.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Ee.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Ee.errors=[]}function L(){return Ee.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function E(){ee()&&!Ee.isRole("staff")&&(Ee.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Ee.request.delete().then(function(){Ee.dismissModal(),d.publish("LeaveRequest::delete",Ee.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Ee.getStatusFromValue(Ee.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Ee.requestStatuses[e]})}function N(){return Ee.request?Ee.request.request_type:Ee.leaveType||null}function U(){return!Ee.request||e.equals({},Ee.requestStatuses)?[]:Ee.request.status_id?B():F("none")}function H(e){return n.find(Ee.requestStatuses,function(t){return t.value===e})}function W(e){Ee.errors=n.isArray(e)?e:[e],Ee.loading.absenceTypes=!1,Ee.submitting=!1}function V(){return!e.equals(Se,Ee.request.attributes())||Ee.canManage&&Ee.newStatusOnSave}function Y(){return Ee.postContactSelection=!0,Ee.staffMemberSelectionComplete=!1,Ee.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Ee.isMode("edit")?ge:n.noop).then(function(){Ee.postContactSelection=!1,Ee.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Ee.canManage?f.find(Ee.request.contact_id).then(function(e){Ee.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Ee.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Le.push(t)})}function J(){var e,t;Ee.request=Ee.leaveRequest||null,e=N(),t=Ee.initRequestAttributes(),"leave"===e?Ee.request=y.init(t):"sickness"===e?Ee.request=$.init(t):"toil"===e&&(Ee.request=q.init(t))}function K(){var e={};return Ee.request?e=Ee.request.attributes():Ee.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Ee.canManage=Ee.isRole("manager")||Ee.isRole("admin")})}function Z(){(Ee.isRole("admin")||Ee.isMode("create")&&Ee.isRole("manager"))&&(Ee.newStatusOnSave=Ee.requestStatuses[_.statusNames.approved].value)}function ee(){return!Ee.request.status_id||!n.includes(["cancelled","rejected"],H(Ee.request.status_id).name)}function te(e){var t=Ee.getStatusFromValue(Ee.request.status_id);return!!t&&t.name===e}function ne(e){return Ee.request&&Ee.request.request_type===e}function ae(e){return Ee.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Ee.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Ee.loading.entitlements=!0,b.all({contact_id:Ee.request.contact_id,period_id:Ee.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Ee.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Ee.selectedContactId?f.find(Ee.selectedContactId).then(function(e){Ee.managedContacts=[e]}):Ee.isRole("admin")?f.all().then(function(e){Ee.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Ee.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Ee.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Ee.request),Ee.errors=[],Ee.dismissModal()}function pe(){["from","to"].forEach(function(e){Ee.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Ee.absenceTypes=me(Te.types,e),!Ee.absenceTypes.length)return r.reject(xe)}function ve(){Ee.period=n.find(Ee.absencePeriods,function(e){return Ee.isMode("create")?e.current:re(Ee.request,e)})}function be(){Ee.isMode("create")?(Ee.selectedAbsenceType=Ee.absenceTypes[0],Ee.request.type_id=Ee.selectedAbsenceType.id):Ee.selectedAbsenceType=n.find(Ee.absenceTypes,function(e){return e.id===Ee.request.type_id})}function ge(){Se=e.copy(Ee.request.attributes())}function ye(){var e;Ee.request.id?(e=[Ee.requestStatuses[_.statusNames.approved].value,Ee.requestStatuses[_.statusNames.adminApproved].value,Ee.requestStatuses[_.statusNames.rejected].value,Ee.requestStatuses[_.statusNames.cancelled].value],Ee.mode="edit",Ee.isRole("staff")&&e.indexOf(Ee.request.status_id)>-1&&(Ee.mode="view")):Ee.mode="create"}function _e(){var e=Ee.request.status_id;if(!Ee.isMode("view")&&!Ee.submitting)return Ee.submitting=!0,I(),A(),Ee.request.isValid().then(ee()&&x).then(E).then(!Ee.request.change_balance&&pe).then($e).then(function(){return Ee.isMode("edit")?Ae():L()}).catch(function(t){Ee.request.status_id=e,t&&W(t)}).finally(function(){Ee.submitting=!1})}function $e(){return r.all(Le.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Ee.request.update().then(qe).then(function(){Ee.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Ee.isRole("staff")||Ee.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Le=[],Ee=n.assign(this,m);Ee.absencePeriods=[],Ee.absenceTypes=[],Ee.canManage=!1,Ee.contactName=null,Ee.errors=[],Ee.loading={absenceTypes:!0,entitlements:!0},Ee.managedContacts=[],Ee.mode="",Ee.newStatusOnSave=null,Ee.period={},Ee.postContactSelection=!1,Ee.requestStatuses={},Ee.selectedAbsenceType={},Ee.staffMemberSelectionComplete=!1,Ee.submitting=!1,Ee.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Ee.canChangeAbsenceType=S,Ee.canSubmit=R,Ee.closeAlert=O,Ee.deleteLeaveRequest=M,Ee.dismissModal=k,Ee.getStatuses=U,Ee.getStatusFromValue=H,Ee.initAfterContactSelection=Y,Ee.initRequestAttributes=K,Ee.isLeaveStatus=te,Ee.isLeaveType=ne,Ee.isMode=ae,Ee.isRole=oe,Ee.submit=_e,Ee.updateAbsenceType=we,function(){Ee.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Ee.canManage&&!Ee.isMode("edit")&&le()}).then(function(){if(Ee.selectedContactId&&(Ee.request.contact_id=Ee.selectedContactId),Ee.request.contact_id)return Ee.initAfterContactSelection()}).catch(W).finally(function(){Ee.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name,r.changeTab=a}]})}),function(e){ -define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); +!function(e){define("leave-absences/shared/config",[],function(){var t=CRM.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences/shared";e.config({paths:{"leave-absences/shared/ui-router":"leave-absences/shared/vendor/angular-ui-router.min",mocks:"../test/mocks"},shim:{"leave-absences/shared/ui-router":{}}}),e.config({paths:{"leave-absences/shared/ui-router":t+"/vendor/angular-ui-router.min",mocks:CRM.vars.leaveAndAbsences.baseURL+"/js/angular/test/mocks"}})})}(require),function(e){define("leave-absences/shared/ui-router",[],function(){return function(){"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(e,t,n){"use strict";function a(e,t){return W(new(W(function(){},{prototype:e})),t)}function r(e){return H(arguments,function(t){t!==e&&H(t,function(t,n){e.hasOwnProperty(n)||(e[n]=t)})}),e}function o(e,t){var n=[];for(var a in e.path){if(e.path[a]!==t.path[a])break;n.push(e.path[a])}return n}function s(e){if(Object.keys)return Object.keys(e);var t=[];return H(e,function(e,n){t.push(n)}),t}function i(e,t){if(Array.prototype.indexOf)return e.indexOf(t,Number(arguments[2])||0);var n=e.length>>>0,a=Number(arguments[2])||0;for((a=a<0?Math.ceil(a):Math.floor(a))<0&&(a+=n);a=0||(l.push(r[m]),c[r[m]]=e[r[m]]);return W({},c,t)}function c(e,t,n){if(!n){n=[];for(var a in e)n.push(a)}for(var r=0;r "));if(g[n]=a,F(e))v.push(n,[function(){return t.get(e)}],c);else{var r=t.annotate(e);H(r,function(e){e!==n&&u.hasOwnProperty(e)&&f(u[e],e)}),v.push(n,e,r)}b.pop(),g[n]=o}}function p(e){return N(e)&&e.then&&e.$$promises}if(!N(u))throw new Error("'invocables' must be an object");var h=s(u||{}),v=[],b=[],g={};return H(u,f),u=b=g=null,function(a,o,s){function i(){--y||(_||r(g,o.$$values),f.$$values=g,f.$$promises=f.$$promises||!0,delete f.$$inheritedValues,c.resolve(g))}function u(e){f.$$failure=e,c.reject(e)}if(p(a)&&s===n&&(s=o,o=a,a=null),a){if(!N(a))throw new Error("'locals' must be an object")}else a=l;if(o){if(!p(o))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else o=d;var c=e.defer(),f=c.promise,b=f.$$promises={},g=W({},a),y=1+v.length/3,_=!1;if(j(o.$$failure))return u(o.$$failure),f;o.$$inheritedValues&&r(g,m(o.$$inheritedValues,h)),W(b,o.$$promises),o.$$values?(_=r(g,m(o.$$values,h)),f.$$inheritedValues=m(o.$$values,h),i()):(o.$$inheritedValues&&(f.$$inheritedValues=m(o.$$inheritedValues,h)),o.then(i,u));for(var $=0,q=v.length;$=0));)g=o(b.id,b.type,b.cfg,"path"),d+=s(b.segment,g.type.pattern.source,g.squash,g.isOptional),f.push(b.segment),m=c.lastIndex;y=e.substring(m);var _=y.indexOf("?");if(_>=0){var $=this.sourceSearch=y.substring(_);if(y=y.substring(0,_),this.sourcePath=e.substring(0,m+_),$.length>0)for(m=0;u=l.exec($);)b=i(u,!0),g=o(b.id,b.type,b.cfg,"search"),m=c.lastIndex}else this.sourcePath=e,this.sourceSearch="";d+=s(y)+(!1===t.strict?"/?":"")+"$",f.push(y),this.regexp=new RegExp(d,t.caseInsensitive?"i":n),this.prefix=f[0],this.$$paramNames=v}function y(e){W(this,e)}function _(){function e(e){return null!=e?e.toString().replace(/(~|\/)/g,function(e){return{"~":"~~","/":"~2F"}[e]}):e}function r(e){return null!=e?e.toString().replace(/(~~|~2F)/g,function(e){return{"~~":"~","~2F":"/"}[e]}):e}function o(){return{strict:h,caseInsensitive:m}}function u(e){return B(e)||U(e)&&B(e[e.length-1])}function c(){for(;q.length;){var e=q.shift();if(e.pattern)throw new Error("You cannot override a type's .pattern at runtime.");t.extend(b[e.name],d.invoke(e.def))}}function l(e){W(this,e||{})}G=this;var d,m=!1,h=!0,v=!1,b={},$=!0,q=[],C={string:{encode:e,decode:r,is:function(e){return null==e||!j(e)||"string"==typeof e},pattern:/[^\/]*/},int:{encode:e,decode:function(e){return parseInt(e,10)},is:function(e){return j(e)&&this.decode(e.toString())===e},pattern:/\d+/},bool:{encode:function(e){return e?1:0},decode:function(e){return 0!==parseInt(e,10)},is:function(e){return!0===e||!1===e},pattern:/0|1/},date:{encode:function(e){return this.is(e)?[e.getFullYear(),("0"+(e.getMonth()+1)).slice(-2),("0"+e.getDate()).slice(-2)].join("-"):n},decode:function(e){if(this.is(e))return e;var t=this.capture.exec(e);return t?new Date(t[1],t[2]-1,t[3]):n},is:function(e){return e instanceof Date&&!isNaN(e.valueOf())},equals:function(e,t){return this.is(e)&&this.is(t)&&e.toISOString()===t.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:t.toJson,decode:t.fromJson,is:t.isObject,equals:t.equals,pattern:/[^\/]*/},any:{encode:t.identity,decode:t.identity,equals:t.equals,pattern:/.*/}};_.$$getDefaultValue=function(e){if(!u(e.value))return e.value;if(!d)throw new Error("Injectable functions cannot be called at configuration time");return d.invoke(e.value)},this.caseInsensitive=function(e){return j(e)&&(m=e),m},this.strictMode=function(e){return j(e)&&(h=e),h},this.defaultSquashPolicy=function(e){if(!j(e))return v;if(!0!==e&&!1!==e&&!F(e))throw new Error("Invalid squash policy: "+e+". Valid policies: false, true, arbitrary-string");return v=e,e},this.compile=function(e,t){return new g(e,W(o(),t))},this.isMatcher=function(e){if(!N(e))return!1;var t=!0;return H(g.prototype,function(n,a){B(n)&&(t=t&&j(e[a])&&B(e[a]))}),t},this.type=function(e,t,n){if(!j(t))return b[e];if(b.hasOwnProperty(e))throw new Error("A type named '"+e+"' has already been defined.");return b[e]=new y(W({name:e},t)),n&&(q.push({name:e,def:n}),$||c()),this},H(C,function(e,t){b[t]=new y(W({name:t},e))}),b=a(b,{}),this.$get=["$injector",function(e){return d=e,$=!1,c(),H(C,function(e,t){b[t]||(b[t]=new y(e))}),this}],this.Param=function(e,a,r,o){function c(){if(!d)throw new Error("Injectable functions cannot be called at configuration time");var e=d.invoke(r.$$fn);if(null!==e&&e!==n&&!h.type.is(e))throw new Error("Default value ("+e+") for parameter '"+h.id+"' is not an instance of Type ("+h.type.name+")");return e}function l(e){function t(e){return function(t){return t.from===e}}return e=function(e){var n=p(f(h.replace,t(e)),function(e){return e.to});return n.length?n[0]:e}(e),j(e)?h.type.$normalize(e):c()}function m(){return"{Param:"+e+" "+a+" squash: '"+$+"' optional: "+_+"}"}var h=this;r=function(e){var t=N(e)?s(e):[];return-1===i(t,"value")&&-1===i(t,"type")&&-1===i(t,"squash")&&-1===i(t,"array")&&(e={value:e}),e.$$fn=u(e.value)?e.value:function(){return e.value},e}(r),a=function(n,a,r){if(n.type&&a)throw new Error("Param '"+e+"' has two type configurations.");return a||(n.type?t.isString(n.type)?b[n.type]:n.type instanceof y?n.type:new y(n.type):"config"===r?b.any:b.string)}(r,a,o);var g=function(){var t={array:"search"===o&&"auto"},n=e.match(/\[\]$/)?{array:!0}:{};return W(t,n,r).array}();a=g?a.$asArray(g,"search"===o):a,"string"!==a.name||g||"path"!==o||r.value!==n||(r.value="");var _=r.value!==n,$=function(e,t){var n=e.squash;if(!t||!1===n)return!1;if(!j(n)||null==n)return v;if(!0===n||F(n))return n;throw new Error("Invalid squash policy: '"+n+"'. Valid policies: false, true, or arbitrary string")}(r,_),q=function(e,t,a,r){var o,s,u=[{from:"",to:a||t?n:""},{from:null,to:a||t?n:""}];return o=U(e.replace)?e.replace:[],F(r)&&o.push({from:r,to:n}),s=p(o,function(e){return e.from}),f(u,function(e){return-1===i(s,e.from)}).concat(o)}(r,g,_,$);W(this,{id:e,type:a,location:o,array:g,squash:$,replace:q,isOptional:_,value:l,dynamic:n,config:r,toString:m})},l.prototype={$$new:function(){return a(this,W(new l,{$$parent:this}))},$$keys:function(){for(var e=[],t=[],n=this,a=s(l.prototype);n;)t.push(n),n=n.$$parent;return t.reverse(),H(t,function(t){H(s(t),function(t){-1===i(e,t)&&-1===i(a,t)&&e.push(t)})}),e},$$values:function(e){var t={},n=this;return H(n.$$keys(),function(a){t[a]=n[a].value(e&&e[a])}),t},$$equals:function(e,t){var n=!0,a=this;return H(a.$$keys(),function(r){var o=e&&e[r],s=t&&t[r];a[r].type.equals(o,s)||(n=!1)}),n},$$validates:function(e){var a,r,o,s,i,u=this.$$keys();for(a=0;a=0)throw new Error("State must have a valid name");if(T.hasOwnProperty(n))throw new Error("State '"+n+"' is already defined");var r=-1!==n.indexOf(".")?n.substring(0,n.lastIndexOf(".")):F(t.parent)?t.parent:N(t.parent)&&F(t.parent.name)?t.parent.name:"";if(r&&!T[r])return f(r,t.self);for(var o in S)B(S[o])&&(t[o]=S[o](t,S.$delegates[o]));return T[n]=t,!t[P]&&t.url&&e.when(t.url,["$match","$stateParams",function(e,n){A.$current.navigable==t&&c(e,n)||A.transitionTo(t,e,{inherit:!0,location:!1})}]),v(n),t}function g(e){return e.indexOf("*")>-1}function y(e){for(var t=e.split("."),n=A.$current.name.split("."),a=0,r=t.length;a=T;a--)s=p[a],s.self.onExit&&i.invoke(s.self.onExit,s.self,s.locals.globals),s.locals=null;for(a=T;a<_.length;a++)r=_[a],r.locals=E[a],r.self.onEnter&&i.invoke(r.self.onEnter,r.self,r.locals.globals);return A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.$current=t,A.current=t.self,A.params=n,V(A.params,f),A.transition=null,o.location&&t.navigable&&v.push(t.navigable.url,t.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===o.location}),o.notify&&e.$broadcast("$stateChangeSuccess",t.self,n,c.self,d),v.update(!0),A.current)}).then(null,function(a){return a===D?S:A.transition!==B?(e.$broadcast("$stateChangeCancel",t.self,n,c.self,d),S):(A.transition=null,s=e.$broadcast("$stateChangeError",t.self,n,c.self,d,a),s.defaultPrevented||v.update(),r.reject(a))});return B},A.is=function(e,t,a){a=W({relative:A.$current},a||{});var r=m(e,a.relative);return j(r)?A.$current===r&&(!t||c(r.params.$$values(t),f)):n},A.includes=function(e,t,a){if(a=W({relative:A.$current},a||{}),F(e)&&g(e)){if(!y(e))return!1;e=A.$current.name}var r=m(e,a.relative);if(!j(r))return n;if(!j(A.$current.includes[r.name]))return!1;if(!t)return!0;for(var o=s(t),i=0;i2?c.enter(e,null,n).then(a):c.enter(e,null,n,a)},leave:function(e,n){t.version.minor>2?c.leave(e).then(n):c.leave(e,n)}};if(u){var a=u&&u(n,e);return{enter:function(e,t,n){a.enter(e,null,t),n()},leave:function(e,t){a.leave(e),t()}}}return function(){return{enter:function(e,t,n){t.after(e),n()},leave:function(e,t){e.remove(),t()}}}()}var i=function(){return n.has?function(e){return n.has(e)?n.get(e):null}:function(e){try{return n.get(e)}catch(e){return null}}}(),u=i("$animator"),c=i("$animate");return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(n,i,u){return function(n,i,c){function l(){if(m&&(m.remove(),m=null),p&&(p.$destroy(),p=null),f){var e=f.data("$uiViewAnim");g.leave(f,function(){e.$$animLeave.resolve(),m=null}),m=f,f=null}}function d(s){var d,m=D(n,c,i,r),y=m&&e.$current&&e.$current.locals[m];if(s||y!==h){d=n.$new(),h=e.$current.locals[m],d.$emit("$viewContentLoading",m);var _=u(d,function(e){var r=o.defer(),s=o.defer(),u={$animEnter:r.promise,$animLeave:s.promise,$$animLeave:s};e.data("$uiViewAnim",u),g.enter(e,i,function(){r.resolve(),p&&p.$emit("$viewContentAnimationEnded"),(t.isDefined(b)&&!b||n.$eval(b))&&a(e)}),l()});f=_,p=d,p.$emit("$viewContentLoaded",m),p.$eval(v)}}var m,f,p,h,v=c.onload||"",b=c.autoscroll,g=s(c,n);i.inheritedData("$uiView"),n.$on("$stateChangeSuccess",function(){d(!1)}),d(!0)}}}}function T(e,n,a,r){return{restrict:"ECA",priority:-400,compile:function(o){var s=o.html();return function(o,i,u){var c=a.$current,l=D(o,u,i,r),d=c&&c.locals[l];if(d){i.data("$uiView",{name:l,state:d.$$state}),i.html(d.$template?d.$template:s);var m=t.extend({},d);o[d.$$resolveAs]=m;var f=e(i.contents());if(d.$$controller){d.$scope=o,d.$element=i;var p=n(d.$$controller,d);d.$$controllerAs&&(o[d.$$controllerAs]=p,o[d.$$controllerAs][d.$$resolveAs]=m),B(p.$onInit)&&p.$onInit(),i.data("$ngControllerController",p),i.children().data("$ngControllerController",p)}f(o)}}}}}function D(e,t,n,a){var r=a(t.uiView||t.name||"")(e),o=n.inheritedData("$uiView");return r.indexOf("@")>=0?r:r+"@"+(o?o.state.name:"")}function P(e,t){var n,a=e.match(/^\s*({[^}]*})\s*$/);if(a&&(e=t+"("+a[1]+")"),!(n=e.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==n.length)throw new Error("Invalid state ref '"+e+"'");return{state:n[1],paramExpr:n[3]||null}}function S(e){var t=e.parent().inheritedData("$uiView");if(t&&t.state&&t.state.name)return t.state}function R(e){var t="[object SVGAnimatedString]"===Object.prototype.toString.call(e.prop("href")),n="FORM"===e[0].nodeName;return{attr:n?"action":t?"xlink:href":"href",isAnchor:"A"===e.prop("tagName").toUpperCase(),clickable:!n}}function I(e,t,n,a,r){return function(o){var s=o.which||o.button,i=r();if(!(s>1||o.ctrlKey||o.metaKey||o.shiftKey||e.attr("target"))){var u=n(function(){t.go(i.state,i.params,i.options)});o.preventDefault();var c=a.isAnchor&&!i.href?1:0;o.preventDefault=function(){c--<=0&&n.cancel(u)}}}}function x(e,t){return{relative:S(e)||t.$current,inherit:!0}}function O(e,n){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(a,r,o,s){var i,u=P(o.uiSref,e.current.name),c={state:u.state,href:null,params:null},l=R(r),d=s[1]||s[0],m=null;c.options=W(x(r,e),o.uiSrefOpts?a.$eval(o.uiSrefOpts):{});var f=function(n){n&&(c.params=t.copy(n)),c.href=e.href(u.state,c.params,c.options),m&&m(),d&&(m=d.$$addStateInfo(u.state,c.params)),null!==c.href&&o.$set(l.attr,c.href)};u.paramExpr&&(a.$watch(u.paramExpr,function(e){e!==c.params&&f(e)},!0),c.params=t.copy(a.$eval(u.paramExpr))),f(),l.clickable&&(i=I(r,e,n,l,function(){return c}),r[r.on?"on":"bind"]("click",i),a.$on("$destroy",function(){r[r.off?"off":"unbind"]("click",i)}))}}}function E(e,t){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(n,a,r,o){function s(t){m.state=t[0],m.params=t[1],m.options=t[2],m.href=e.href(m.state,m.params,m.options),f&&f(),c&&(f=c.$$addStateInfo(m.state,m.params)),m.href&&r.$set(u.attr,m.href)}var i,u=R(a),c=o[1]||o[0],l=[r.uiState,r.uiStateParams||null,r.uiStateOpts||null],d="["+l.map(function(e){return e||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},f=null;n.$watch(d,s,!0),s(n.$eval(d)),u.clickable&&(i=I(a,e,t,u,function(){return m}),a[a.on?"on":"bind"]("click",i),n.$on("$destroy",function(){a[a.off?"off":"unbind"]("click",i)}))}}}function L(e,t,n){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(t,a,r,o){function s(t,n,r){var o=e.get(t,S(a)),s=i(t,n),u={state:o||{name:t},params:n,hash:s};return h.push(u),v[s]=r,function(){var e=h.indexOf(u);-1!==e&&h.splice(e,1)}}function i(e,n){if(!F(e))throw new Error("state should be a string");return N(n)?e+Y(n):(n=t.$eval(n),N(n)?e+Y(n):e)}function u(){for(var e=0;e0)){var n=s(e,t,p);return u(),n}},t.$on("$stateChangeSuccess",u),u()}]}}function M(e){var t=function(t,n){return e.is(t,n)};return t.$stateful=!0,t}function k(e){var t=function(t,n,a){return e.includes(t,n,a)};return t.$stateful=!0,t}var j=t.isDefined,B=t.isFunction,F=t.isString,N=t.isObject,U=t.isArray,H=t.forEach,W=t.extend,V=t.copy,Y=t.toJson;t.module("ui.router.util",["ng"]),t.module("ui.router.router",["ui.router.util"]),t.module("ui.router.state",["ui.router.router","ui.router.util"]),t.module("ui.router",["ui.router.state"]),t.module("ui.router.compat",["ui.router"]),v.$inject=["$q","$injector"],t.module("ui.router.util").service("$resolve",v),b.$inject=["$http","$templateCache","$injector"],t.module("ui.router.util").service("$templateFactory",b);var G;g.prototype.concat=function(e,t){var n={caseInsensitive:G.caseInsensitive(),strict:G.strictMode(),squash:G.defaultSquashPolicy()};return new g(this.sourcePath+e+this.sourceSearch,W(n,t),this)},g.prototype.toString=function(){return this.source},g.prototype.exec=function(e,t){var n=this.regexp.exec(e);if(!n)return null;t=t||{};var a,r,o,s=this.parameters(),i=s.length,u=this.segments.length-1,c={};if(u!==n.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,d;for(a=0;a=":e}};return a.all(n).then(function(e){return e&&e.length?r.init(e[0],!0):null})}})}])}),define("leave-absences/shared/apis/absence-type.api",["common/lodash","common/moment","leave-absences/shared/modules/apis","common/services/api"],function(e,t,n){"use strict";n.factory("AbsenceTypeAPI",["$log","api","shared-settings",function(n,a,r){return n.debug("AbsenceTypeAPI"),a.extend({all:function(t){return n.debug("AbsenceTypeAPI.all"),this.sendGET("AbsenceType","get",e.defaultsDeep(t||{},{is_active:!0,options:{sort:"weight ASC"}})).then(function(e){return e.values})},calculateToilExpiryDate:function(a,o,s){return n.debug("AbsenceTypeAPI.calculateToilExpiryDate"),s=e.assign({},s,{absence_type_id:a,date:t(o).format(r.serverDateFormat)}),this.sendPOST("AbsenceType","calculateToilExpiryDate",s).then(function(e){return e.values.expiry_date})}})}])}),define("leave-absences/shared/instances/absence-type.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("AbsenceTypeInstance",["$log","ModelInstance",function(e,t){return e.debug("AbsenceTypeInstance"),t.extend({})}])}),define("leave-absences/shared/models/absence-type.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","common/models/option-group","leave-absences/shared/apis/absence-type.api","leave-absences/shared/instances/absence-type.instance"],function(e,t){"use strict";t.factory("AbsenceType",["$log","$q","Model","OptionGroup","AbsenceTypeAPI","AbsenceTypeInstance",function(t,n,a,r,o,s){return t.debug("AbsenceType"),a.extend({all:function(e){return o.all(e).then(function(e){return e.map(function(e){return s.init(e,!0)})})},calculateToilExpiryDate:function(e,t,n){return o.calculateToilExpiryDate(e,t,n)},canExpire:function(e){return o.all({accrual_expiration_unit:{"IS NOT NULL":1},accrual_expiration_duration:{"IS NOT NULL":1},allow_accruals_request:1,id:e,options:{limit:1},return:["id"]}).then(function(e){return e.length>0})},loadCalculationUnits:function(t){return r.valuesOf("hrleaveandabsences_absence_type_calculation_unit").then(function(n){return n=e.indexBy(n,"value"),e.map(t,function(t){return e.assign(t,{calculation_unit_label:n[t.calculation_unit].label,calculation_unit_name:n[t.calculation_unit].name})})})}})}])}),define("leave-absences/shared/apis/work-pattern.api",["common/lodash","leave-absences/shared/modules/apis","common/services/api"],function(e,t){"use strict";t.factory("WorkPatternAPI",["$log","api",function(t,n){function a(t){var n=e.clone(t);return n.workPattern=n["api.WorkPattern.get"].values[0],delete n["api.WorkPattern.get"],n}return t.debug("WorkPatternAPI"),n.extend({assignWorkPattern:function(t,n,a,r,o,s){return this.sendPOST("ContactWorkPattern","create",e.assign({},s,{contact_id:t,pattern_id:n,effective_date:a,effective_end_date:r,change_reason:o})).then(function(e){return e.values})},get:function(e){return this.sendGET("WorkPattern","get",e||{}).then(function(e){return e.values})},getCalendar:function(n,a,r,o){return t.debug("WorkPatternAPI.getCalendar",n,a,r,o),this.sendGET("WorkPattern","getcalendar",e.assign({},o,{contact_id:e.isArray(n)?{IN:n}:n,start_date:a,end_date:r}))},unassignWorkPattern:function(e){return this.sendPOST("ContactWorkPattern","delete",{id:e})},workPatternsOf:function(t,n,r){return this.sendGET("ContactWorkPattern","get",e.assign({},n,{contact_id:t,"api.WorkPattern.get":{id:"$value.pattern_id"}}),r).then(function(e){return e=e.values,e.map(a)})}})}])}),define("leave-absences/shared/instances/calendar.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance"],function(e,t,n){"use strict";n.factory("CalendarInstance",["$log","$q","ModelInstance","shared-settings","OptionGroup",function(n,a,r,o,s){function i(t,n){return c().then(function(a){var r=this.days[u(t).valueOf()];return!!r&&e.find(a,function(e){return e.name===n}).value===r.type}.bind(this))}function u(e){return t(e,o.serverDateFormat).clone()}function c(){return l=l||s.valuesOf("hrleaveandabsences_work_day_type")}var l;return r.extend({defaultCustomData:function(){return{days:[]}},isNonWorkingDay:function(e){return i.call(this,e,"non_working_day")},isWeekend:function(e){return i.call(this,e,"weekend")},isWorkingDay:function(e){return i.call(this,e,"working_day")},transformAttributes:function(t){var n={};return t.calendar.forEach(function(e){n[u(e.date).valueOf()]=e}),e(t).omit("calendar").assign({days:n}).value()}})}])}),define("leave-absences/shared/models/calendar.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/work-pattern.api","leave-absences/shared/instances/calendar.instance"],function(e,t){"use strict";t.factory("Calendar",["$log","Model","WorkPatternAPI","CalendarInstance",function(t,n,a,r){return t.debug("Calendar"),n.extend({get:function(n,o,s,i){return t.debug("Calendar.get"),a.getCalendar(n,o,s,i).then(function(t){var a=t.values.map(function(e){return r.init(e)});return e.isArray(n)?a:a[0]})}})}])}),define("leave-absences/shared/apis/entitlement.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("EntitlementAPI",["$log","api",function(e,n){function a(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getremainder"].values;return a.length&&(n.remainder=a[0].remainder),delete n["api.LeavePeriodEntitlement.getremainder"],n}function r(e){var n=t.clone(e),a=n["api.LeavePeriodEntitlement.getentitlement"].values[0].entitlement;return n.value=a,delete n["api.LeavePeriodEntitlement.getentitlement"],n}return e.debug("EntitlementAPI"),n.extend({all:function(t,n){return e.debug("EntitlementAPI.all"),t["api.LeavePeriodEntitlement.getentitlement"]={entitlement_id:"$value.id"},n&&(t["api.LeavePeriodEntitlement.getremainder"]={entitlement_id:"$value.id",include_future:!0}),this.sendGET("LeavePeriodEntitlement","get",t,!1).then(function(e){return e.values}).then(function(e){return e=e.map(r),n&&(e=e.map(a)),e})},breakdown:function(t){return e.debug("EntitlementAPI.breakdown"),this.sendGET("LeavePeriodEntitlement","getbreakdown",t).then(function(e){return e.values})},getLeaveBalances:function(t,n,a,r,o){return e.debug("EntitlementAPI.getLeaveBalances"),this.getAll("LeavePeriodEntitlement",t,n,a,r,"getLeaveBalances",o)}})}])}),define("leave-absences/shared/apis/entitlement-log.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("EntitlementLogAPI",["$log","api",function(e,t){return e.debug("EntitlementLogAPI"),t.extend({all:function(t){return e.debug("EntitlementLogAPI.all"),this.sendGET("LeavePeriodEntitlementLog","get",t,!1).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/entitlement.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("EntitlementInstance",["$log","ModelInstance","EntitlementAPI",function(e,t,n){return e.debug("EntitlementInstance"),t.extend({defaultCustomData:function(){return{remainder:{current:0,future:0},breakdown:[]}},getBreakdown:function(){return n.breakdown({entitlement_id:this.id}).then(function(e){this.breakdown=e}.bind(this))}})}])}),define("leave-absences/shared/models/entitlement.model",["common/lodash","leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/entitlement.api","leave-absences/shared/apis/entitlement-log.api","leave-absences/shared/instances/entitlement.instance"],function(e,t){"use strict";t.factory("Entitlement",["$log","Model","EntitlementAPI","EntitlementInstance","EntitlementLogAPI",function(t,n,a,r,o){return t.debug("Entitlement"),n.extend({all:function(e,t){return a.all(this.processFilters(e),t).then(function(e){return e.map(function(e){return r.init(e,!0)})})},breakdown:function(t,n){return a.breakdown(t).then(function(t){return n?(n.map(function(n){var a=e.find(t,function(e){return e.id===n.id});return a&&(n.breakdown=a.breakdown),n}),n):t.map(function(e){return r.init(e,!0)})})},logs:function(t){return t=e.cloneDeep(t||{}),t.contact_id&&(t["entitlement_id.contact_id"]=t.contact_id,delete t.contact_id),t.period_id&&(t["entitlement_id.period_id"]=t.period_id,delete t.period_id),t.return=t.return||[],t.return.push("entitlement_id","entitlement_id.type_id","editor_id","entitlement_amount","comment","created_date"),o.all(t)}})}])}),define("leave-absences/shared/apis/leave-request.api",["leave-absences/shared/modules/apis","common/lodash","common/services/api"],function(e,t){"use strict";e.factory("LeaveRequestAPI",["$log","api","$q","shared-settings",function(e,n,a){return e.debug("LeaveRequestAPI"),n.extend({all:function(t,n,r,o,s){e.debug("LeaveRequestAPI.all");var i=a.defer();return t&&t.contact_id&&t.contact_id.IN&&0===t.contact_id.IN.length?i.resolve({list:[],total:0,allIds:[]}):i.resolve(this.getAll("LeaveRequest",t,n,r,o,"getFull",s)),i.promise},balanceChangeByAbsenceType:function(n){e.debug("LeaveRequestAPI.balanceChangeByAbsenceType");var r=a.defer();return n.contact_id&&n.period_id||r.reject("contact_id and period_id are mandatory"),n=t.defaults(n,{statuses:null,public_holiday:!1}),this.sendGET("LeaveRequest","getbalancechangebyabsencetype",n,!1).then(function(e){r.resolve(e.values)}),r.promise},calculateBalanceChange:function(n){return e.debug("LeaveRequestAPI.calculateBalanceChange",n),this.sendPOST("LeaveRequest","calculatebalancechange",n).then(function(e){return e.values.breakdown=t.values(e.values.breakdown),e.values})},getBalanceChangeBreakdown:function(e){return this.sendGET("LeaveRequest","getBreakdown",{leave_request_id:e},!1)},getWorkDayForDate:function(e,t){return this.sendGET("LeaveRequest","getWorkDayForDate",{leave_date:e,contact_id:t.toString()},!1)},create:function(t){return e.debug("LeaveRequestAPI.create",t),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})},delete:function(e){return this.sendPOST("LeaveRequest","delete",{id:e})},deleteAttachment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,attachment_id:n}),this.sendPOST("LeaveRequest","deleteattachment",a).then(function(e){return e.values})},deleteComment:function(e,n){return n=t.assign({},n,{comment_id:e}),this.sendPOST("LeaveRequest","deletecomment",n).then(function(e){return e.values})},find:function(t){return e.debug("LeaveRequestAPI.find"),this.sendGET("LeaveRequest","getFull",{id:t},!1).then(function(e){return 0===e.values.length?a.reject("LeaveRequest not found with this ID"):e.values[0]})},getAttachments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getattachments",n,!1).then(function(e){return e.values})},getComments:function(e,n){return n=t.assign({},n,{leave_request_id:e}),this.sendGET("LeaveRequest","getcomment",n,!1).then(function(e){return e.values})},isManagedBy:function(t,n){return e.debug("LeaveRequestAPI.isManagedBy"),this.sendPOST("LeaveRequest","isManagedBy",{leave_request_id:t,contact_id:n}).then(function(e){return e.values})},isValid:function(n){e.debug("LeaveRequestAPI.isValid",n);var r=a.defer();return this.sendPOST("LeaveRequest","isValid",n).then(function(e){e.count>0?r.reject(t(e.values).map().flatten().value()):r.resolve(e.values)}),r.promise},saveComment:function(e,n,a){return a=t.assign({},a,{leave_request_id:e,text:n.text,contact_id:n.contact_id}),this.sendPOST("LeaveRequest","addcomment",a).then(function(e){return e.values})},update:function(t){e.debug("LeaveRequestAPI.update",t);var n=a.defer();return t.id||n.reject("id is mandatory field"),this.sendPOST("LeaveRequest","create",t).then(function(e){return e.values[0]})}})}])}),define("leave-absences/shared/instances/leave-request.instance",["common/lodash","common/moment","leave-absences/shared/modules/models-instances","common/models/option-group","common/models/instances/instance","leave-absences/shared/models/absence-type.model"],function(e,t,n){"use strict";n.factory("LeaveRequestInstance",["$q","checkPermissions","OptionGroup","shared-settings","ModelInstance","LeaveRequestAPI","AbsenceType",function(n,a,r,o,s,i,u){function c(e){return p(e).then(function(e){var t=this.status_id;return this.status_id=e.value,this.update().catch(function(e){return this.status_id=t,n.reject(e)}.bind(this))}.bind(this))}function l(){return u.all({id:this.type_id}).then(u.loadCalculationUnits).then(function(e){return n.all({calculatedBalanceChange:this.calculateBalanceChange(e[0].calculation_unit_name),currentBalanceChange:this.getBalanceChangeBreakdown()})}.bind(this)).then(function(e){return+e.currentBalanceChange.amount!=+e.calculatedBalanceChange.amount})}function d(e){return p(e).then(function(e){return this.status_id===e.value}.bind(this))}function m(){var t=[];return e.forEach(this.files,function(e){e.toBeDeleted&&t.push(i.deleteAttachment(this.id,e.attachment_id))}.bind(this)),n.all(t)}function f(e){return t.duration(e.time_to).subtract(t.duration(e.time_from)).asHours()}function p(t){return r.valuesOf("hrleaveandabsences_leave_request_status").then(function(n){return e.find(n,function(e){return e.name===t})})}function h(t){var a=e.cloneDeep(t),r=a.breakdown.length>1,o=e.first(e.values(a.breakdown)),s=e.last(e.values(a.breakdown));return n.all([this.getWorkDayForDate(o.date),r&&this.getWorkDayForDate(s.date)]).then(function(t){return o.amount=t[0].time_from?Math.min(this.from_date_amount,f(t[0])):0,r&&(s.amount=t[1].time_from?Math.min(this.to_date_amount,f(t[1])):0),a.amount=-1*e.reduce(a.breakdown,function(e,t){return e+t.amount},0),a}.bind(this))}function v(){var e=this.id,t=[];return t.push(n.sequence(this.comments.filter(function(e){return!e.comment_id}).map(function(t){return function(){return i.saveComment(e,t)}}))),t=t.concat(this.comments.filter(function(e){return e.comment_id&&e.toBeDeleted}).map(function(e){return i.deleteComment(e.comment_id)})),n.all(t)}return s.extend({defaultCustomData:function(){return{comments:[],files:[],request_type:"leave"}},calculateBalanceChange:function(t){var n=["contact_id","from_date","to_date","type_id","from_date_type","to_date_type"];return"hours"===t&&e.pull(n,"from_date_type","to_date_type"),i.calculateBalanceChange(e.pick(this,n)).then(function(e){return"hours"===t?h.call(this,e):e}.bind(this))},cancel:function(){return c.call(this,o.statusNames.cancelled)},approve:function(){return c.call(this,o.statusNames.approved)},checkIfBalanceChangeNeedsRecalculation:function(){return l.call(this)},reject:function(){return c.call(this,o.statusNames.rejected)},sendBack:function(){return c.call(this,o.statusNames.moreInformationRequired)},update:function(){return i.update(this.toAPI()).then(function(){return n.all([v.call(this),m.call(this)])}.bind(this))},create:function(){return i.create(this.toAPI()).then(function(e){return this.id=e.id,n.all([v.call(this)])}.bind(this))},deleteAttachment:function(e){e.toBeDeleted||(e.toBeDeleted=!0)},deleteComment:function(t){if(t.comment_id)return void(t.toBeDeleted=!0);this.comments=e.reject(this.comments,function(e){return t.created_at===e.created_at&&t.text===e.text})},delete:function(){return i.delete(this.id)},getBalanceChangeBreakdown:function(){return i.getBalanceChangeBreakdown(this.id).then(function(t){return{amount:e.reduce(t.values,function(e,t){return e+parseFloat(t.amount)},0),breakdown:t.values.map(function(e){return{amount:Math.abs(parseFloat(e.amount)),date:e.date,type:{id:e.id,value:e.type,label:e.label}}})}})},getWorkDayForDate:function(e){return i.getWorkDayForDate(e,this.contact_id).then(function(e){return e.values}).catch(function(e){return n.reject(e)})},isValid:function(){return i.isValid(this.toAPI())},isApproved:function(){return d.call(this,o.statusNames.approved)},isAwaitingApproval:function(){return d.call(this,o.statusNames.awaitingApproval)},isCancelled:function(){return d.call(this,o.statusNames.cancelled)},isRejected:function(){return d.call(this,o.statusNames.rejected)},isSentBack:function(){return d.call(this,o.statusNames.moreInformationRequired)},loadComments:function(){return this.id?i.getComments(this.id).then(function(e){this.comments=e}.bind(this)):n.resolve()},roleOf:function(e){return this.contact_id===e?n.resolve("owner"):a(o.permissions.admin.administer).then(function(t){return t?"admin":i.isManagedBy(this.id,e).then(function(e){return e?"manager":"none"})}.bind(this))},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])},loadAttachments:function(){return this.id?i.getAttachments(this.id).then(function(e){this.files=e}.bind(this)):n.resolve()}})}])}),define("leave-absences/shared/models/leave-request.model",["leave-absences/shared/modules/models","common/models/model","leave-absences/shared/apis/leave-request.api","leave-absences/shared/instances/leave-request.instance"],function(e){"use strict";e.factory("LeaveRequest",["$log","Model","LeaveRequestAPI","LeaveRequestInstance",function(e,t,n,a){return e.debug("LeaveRequest"),t.extend({all:function(e,t,r,o,s){return n.all(this.processFilters(e),t,r,o,s).then(function(e){return e.list=e.list.map(function(e){return a.init(e,!0)}),e})},balanceChangeByAbsenceType:function(e){return n.balanceChangeByAbsenceType(this.processFilters(e))},find:function(e){return n.find(e).then(function(e){return a.init(e,!0)})}})}])}),define("leave-absences/shared/apis/public-holiday.api",["leave-absences/shared/modules/apis","common/services/api"],function(e){"use strict";e.factory("PublicHolidayAPI",["$log","api",function(e,t){return e.debug("PublicHolidayAPI"),t.extend({all:function(t){return e.debug("PublicHolidayAPI"),this.sendGET("PublicHoliday","get",t).then(function(e){return e.values})}})}])}),define("leave-absences/shared/instances/public-holiday.instance",["leave-absences/shared/modules/models-instances","common/models/instances/instance"],function(e){"use strict";e.factory("PublicHolidayInstance",["$log","ModelInstance",function(e,t){return e.debug("PublicHolidayInstance"),t.extend({})}])}),define("leave-absences/shared/models/public-holiday.model",["common/moment","leave-absences/shared/modules/models","common/models/model","common/services/hr-settings","leave-absences/shared/apis/public-holiday.api","leave-absences/shared/instances/public-holiday.instance"],function(e,t){"use strict";t.factory("PublicHoliday",["$log","Model","PublicHolidayAPI","PublicHolidayInstance","shared-settings",function(t,n,a,r,o){return t.debug("PublicHoliday"),n.extend({all:function(e){return t.debug("PublicHoliday.all",e),a.all(e).then(function(e){return e.map(function(e){return r.init(e,!0)})})},isPublicHoliday:function(n){t.debug("PublicHoliday.isPublicHoliday",n);var r=e(n).format(o.serverDateFormat),s={date:r};return a.all(s).then(function(e){return!!e.length})}})}])}),define("leave-absences/shared/modules/components",["common/angular","common/modules/directives","common/modules/models","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/models"],function(e){return e.module("leave-absences.components",["common.directives","common.models","leave-absences.settings","leave-absences.models"])}),define("leave-absences/shared/modules/controllers",["common/angular","common/angularBootstrap","leave-absences/shared/modules/models","leave-absences/shared/modules/models-instances","leave-absences/shared/modules/shared-settings"],function(e){return e.module("leave-absences.controllers",["ui.select","leave-absences.models","leave-absences.models.instances","leave-absences.settings"])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers","common/models/contract","common/services/notification.service"],function(e,t,n){function a(e,t,n,a,r,o,s){function i(){return{loadContacts:function(){var e=d.filters.userSettings.assignedTo.type;return u(e).then(function(n){return d.lookupContacts=n,t.all([l.loadFilteredContacts(),"me"!==e?l.loadContactIdsToReduceTo():t.resolve(null)])}).then(function(e){var t=e[0];return d.contactIdsToReduceTo=e[1],t})}}}function u(e){return"me"===e?n.leaveManagees(d.contactId):"unassigned"===e?n.leaveManagees(void 0,{unassigned:!0}):l.loadAllLookUpContacts()}function c(e){o.info("",["

    When All filter is selected, all staff members with contracts which are active in the selected absence period are displayed.

    ","

    People I approve filter displays only staff members who you approve leave for.

    ","

    People without approver filter displays all staff members with contracts which are active in the selected absence period and who do not have any leave approver assigned.

    "].join(""))}e.debug("LeaveCalendarAdminController");var l,d;return{init:function(e){return d=e,l=s.init(d),d.showContactDetailsLink=!0,d.showContactName=!0,d.showFilters=!0,d.filtersByAssignee=[{type:"me",label:"People I approve"},{type:"unassigned",label:"People without approver"},{type:"all",label:"All"}],d.filters.userSettings.assignedTo=d.filtersByAssignee[0],d.showAdminFilteringHint=c,i()}}}n.controller("LeaveCalendarAdminController",["$log","$q","Contact","ContactInstance","Contract","notificationService","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n,a){function r(){return{loadContacts:function(){return n.init({id:s.contactId}).leaveManagees().then(function(e){s.lookupContacts=e}).then(function(){return o.loadFilteredContacts()})}}}e.debug("LeaveCalendarManagerController");var o,s;return{init:function(e){return s=e,o=a.init(s),s.showContactName=!0,s.showFilters=!0,r()}}}n.controller("LeaveCalendarManagerController",["$log","Contact","ContactInstance","LeaveCalendarService",a])}),define("leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(e,t,n){function a(){return{loadContacts:function(){return o.displaySingleContact&&(o.lookupContacts=[{id:o.contactId}]),r.loadFilteredContacts()}}}e.debug("LeaveCalendarStaffController");var r,o;return{init:function(e){return o=e,r=n.init(o),o.filters.userSettings.contacts_with_leaves=!0,o.showTheseContacts=[o.contactId],o.showContactName=!0,o.showFilters=!0,a()}}}n.controller("LeaveCalendarStaffController",["$log","Contact","LeaveCalendarService",a])}),define("leave-absences/shared/components/leave-calendar.component",["common/lodash","common/moment","leave-absences/shared/modules/components","leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-manager.controller","leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d){function m(){N.supportData.absenceTypes.push({id:"",title:"Leave",color:"#4D4D68",calculation_unit:e.chain(N.supportData.calculationUnits).find({name:"days"}).get("value").value()})}function f(){for(var e=[],n=t(N.selectedPeriod.start_date).clone().startOf("month"),a=t(N.selectedPeriod.end_date).clone().endOf("month");n.isBefore(a);)e.push(D(n)),n.add(1,"month");N.months=e}function p(e){return e.format("YYYY-MM")}function h(){o.$new().$watch(function(){return N.selectedMonthIndex},function(e,t){null!==t&&e!==t&&(M(),L(),I())})}function v(e){N.injectMonth=!0,j("injected").then(function(){I(e)}).then(function(){N.loading.calendar=!1})}function b(){B=n("LeaveCalendar"+e.capitalize(F)+"Controller").init(N)}function g(e){return e.current?"Current Period ("+e.title+")":e.title}function y(){return i.all().then(function(t){N.absencePeriods=e.sortBy(t,"start_date"),N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current})}).then(f).then(x)}function _(){return u.all().then(u.loadCalculationUnits)}function $(){return l.valuesOf(["hrleaveandabsences_absence_type_calculation_unit","hrleaveandabsences_leave_request_day_type","hrleaveandabsences_leave_request_status","hrleaveandabsences_toil_amounts"])}function q(){return B.loadContacts().then(function(e){N.contacts=e})}function C(){return l.valuesOf(["hrjc_region","hrjc_location","hrjc_level_type","hrjc_department"]).then(function(e){N.filters.optionValues.regions=e.hrjc_region,N.filters.optionValues.locations=e.hrjc_location,N.filters.optionValues.levelTypes=e.hrjc_level_type,N.filters.optionValues.departments=e.hrjc_department})}function w(){return c.all()}function A(){return a.all([_(),w(),$()]).then(function(t){N.supportData.absenceTypes=t[0],N.supportData.publicHolidays=t[1],N.supportData.calculationUnits=t[2].hrleaveandabsences_absence_type_calculation_unit,N.supportData.dayTypes=t[2].hrleaveandabsences_leave_request_day_type,N.supportData.leaveRequestStatuses=t[2].hrleaveandabsences_leave_request_status,N.supportData.toilAmounts=e.indexBy(t[2].hrleaveandabsences_toil_amounts,"value")})}function T(){var e=a.resolve();return N.injectMonth&&(e=j("destroyed"),N.injectMonth=!1),e}function D(e){return{index:p(e),month:e.month(),year:e.year(),name:e.format("MMMM"),moment:t().year(e.year()).month(e.month())}}function P(){var t=N.selectedPeriod.id;N.selectedPeriod=e.find(N.absencePeriods,function(e){return!!e.current}),t!==N.selectedPeriod.id&&f(),x(),L(),R("month")}function S(e){var n="previous"===e?"subtract":"add";M(t(N.selectedMonth.moment)[n](1,"month")),L(),R("month")}function R(t){t=e.includes(["contacts","period","month"],t)?t:"period",a.resolve().then(T).then("period"===t&&f).then("period"===t&&O).then("contacts"===t&&q).then("month"===t&&L).then(function(){v("contacts"===t)})}function I(e){o.$emit("LeaveCalendar::showMonth",!!e)}function x(){M(t())}function O(){M(N.months[0].moment)}function E(n){var a="previous"===n?"first":"last",r=e[a](N.months),o=t().year(r.year).month(r.month);N.monthPaginatorsAvailability[n]=!N.selectedMonth.moment.isSame(o,"month")}function L(){E("previous"),E("next")}function M(t){t&&(N.selectedMonthIndex=p(t)),N.selectedMonth=e.find(N.months,{index:N.selectedMonthIndex})}function k(){return N.roleOverride?a.resolve().then(function(){F=N.roleOverride +}):a.all([d(s.permissions.admin.administer),d(s.permissions.ssp.manage)]).then(function(e){F=e[0]?"admin":e[1]?"manager":"staff"})}function j(t){return a(function(n){var a=o.$on("LeaveCalendar::month"+e.capitalize(t),function(){a(),n()})})}r.debug("Component: leave-calendar");var B,F,N=this;N.absencePeriods=[],N.contacts=[],N.contactIdsToReduceTo=null,N.injectMonth=!1,N.months=[],N.selectedMonth={},N.selectedMonthIndex="",N.selectedPeriod=null,N.showContactName=!1,N.showFilters=!1,N.supportData={},N.loading={calendar:!0,page:!0},N.filters={hideOnMobile:!0,optionValues:{},userSettings:{contact:null,contacts_with_leaves:!0,department:null,level_type:null,location:null,region:null},absenceTypes:{}},N.monthPaginatorsAvailability={previous:!0,next:!0},N.labelPeriod=g,N.navigateToCurrentMonth=P,N.paginateMonth=S,N.refresh=R,function(){k().then(h).then(b).then(T).then(function(){return a.all([y(),q(),A(),N.showFilters?C():e.noop])}).then(function(){m(),v(),L()}).then(function(){N.loading.page=!1})}()}n.component("leaveCalendar",{bindings:{contactId:"<",displaySingleContact:"0,n={from_date:{to:J.month.days[J.month.days.length-1].date+" 23:59:59"},to_date:{from:J.month.days[0].date+" 00:00:00"},status_id:{IN:I()},contact_id:{IN:J.contacts.map(function(e){return e.id})},type_id:{IN:t?V:e.pluck(J.supportData.absenceTypes,"id")}};return g(),s.all(n,null,null,null,!1).then(function(e){return X={},t&&(e.list=_(e.list)),C(e.list)})}function E(){var t=J.month.days[0].date,n=J.month.days[J.month.days.length-1].date;return o.get(J.contacts.map(function(e){return e.id}),t,n).then(function(t){z=e.indexBy(t,"contact_id")})}function L(){return J.contactIdsToReduceTo&&(J.contacts=J.contacts.filter(function(t){return e.includes(J.contactIdsToReduceTo,t.contact_id)||e.find(X,function(e){return e.contact_id===t.contact_id})})),a.resolve()}function M(t){var n=S(t);X[t.contact_id]=X[t.contact_id]||{},n.forEach(function(n){e.remove(X[t.contact_id][n.date],function(e){return e.id===t.id})})}function k(){r.$emit("LeaveCalendar::monthDestroyed"),G.map(function(e){e.remove?e.remove():e()})}function j(t,n,r){var o,s;return t.contactsData[n]=t.contactsData[n]||{},s=m(n),o=!0===r?a.resolve():a.all([s.isWeekend(p(t.date)),s.isNonWorkingDay(p(t.date))]).then(function(a){e.assign(t.contactsData[n],{isWeekend:a[0],isNonWorkingDay:a[1],isPublicHoliday:D(t.date)})}),o.then(function(){return X[n]&&X[n][t.date]?X[n][t.date]:[]}).then(function(a){a=N(a),e.assign(t.contactsData[n],{leaveRequests:a,leaveRequestsToShowInCell:v(a),leaveRequestsAttributes:$(t,a)})})}function B(){return a.all(J.month.days.map(function(e){return a.all(J.contacts.map(function(t){return j(e,t.id)}))}))}function F(e,t){J.currentPage=0,J.visible=!0,(t||!Y)&&x()}function N(n){return e.sortBy(n,function(e){return+t(e.from_date).format("X")+(A("half_day_pm",e,e.from_date)?1:0)})}function U(t){var n=e.find(J.supportData.absenceTypes,function(e){return e.id===t.type_id});return t.balance_change>0?{borderColor:n.color}:{borderColor:n.color,backgroundColor:n.color}}function H(e){h(e),-1!==I().indexOf(e.status_id)&&c(e)}function W(e){return a.all(S(e).map(function(t){return j(t,e.contact_id,!0)}))}n.debug("Component: leave-calendar-month");var V=[],Y=!1,G=[],z={},X={},J=this;J.currentPage=0,J.pageSize=20,J.visible=!1,J.showContactName=!!J.showContactName,J.showOnlyWithLeaveRequests=!!J.showOnlyWithLeaveRequests,J.$onDestroy=k,J.contactsList=f,J.getContactUrl=y,function(){var e=t().month(J.month.month).year(J.month.year);q(),w(),J.month=l(e),r.$emit("LeaveCalendar::monthInjected")}()}n.component("leaveCalendarMonth",{bindings:{showTheseContacts:"<",contacts:"<",contactIdsToReduceTo:"<",month:"<",period:"<",showContactName:"<",showContactDetailsLink:"<",showOnlyWithLeaveRequests:"<",supportData:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-calendar-month.html"}],controllerAs:"month",controller:["$log","$q","$rootScope","Calendar","LeaveRequest","pubSub","shared-settings",a]})}),define("leave-absences/shared/modules/services",["common/angular","common/modules/services"],function(e){"use strict";return e.module("leave-absences.services",["common.services"])}),define("leave-absences/shared/services/leave-request.service",["common/lodash","leave-absences/shared/modules/services"],function(e,t){"use strict";function n(t,n,a){function r(){var t=n.defer();return a.open(e.defaults(o(),{onConfirm:function(){t.resolve(!0)}})),t.promise}function o(){return{title:"Recalculate Balance Change?",copyCancel:"Cancel",copyConfirm:"Yes",classConfirm:"btn-warning",msg:"The leave balance change has updated since this leave request was created. Do you want to recalculate the balance change?"}}return t.debug("LeaveRequest"),{getBalanceChangeRecalculationPromptOptions:o,promptBalanceChangeRecalculation:r}}t.factory("LeaveRequestService",n),n.$inject=["$log","$q","dialog"]}),define("leave-absences/shared/components/leave-request-actions.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/services/notification.service","common/services/pub-sub","leave-absences/shared/services/leave-request.service"],function(e,t,n){function a(n,a,r,o,s,i,u,c){function l(t){_=$.leaveRequest.status_id,e.includes(["cancel","reject","delete"],t)||"toil"===$.leaveRequest.request_type?r.open(h(t)):f(t)}function d(){return"admin"===$.role&&"public_holiday"===$.leaveRequest.request_type}function m(n){var a=$.absenceTypes[$.leaveRequest.type_id].allow_request_cancelation;return"admin"===$.role||("manager"===$.role?e.includes([q.awaitingApproval,q.moreInformationRequired],n):"3"===a?t().isBefore($.leaveRequest.from_date):"2"===a)}function f(t){r.open({title:"Verifying balance...",loading:!0,optionsPromise:function(){return $.leaveRequest.checkIfBalanceChangeNeedsRecalculation().then(function(n){return n?e.assign(s.getBalanceChangeRecalculationPromptOptions(),{onCloseAfterConfirm:function(){o.openModal($.leaveRequest,$.leaveRequest.request_type,$.leaveRequest.contact_id,"my-leave"===a.section,!0)}}):h(t)})}})}function p(){e.isArray($.leaveRequestStatuses)&&($.leaveRequestStatuses=e.indexBy($.leaveRequestStatuses,"value")),e.isArray($.absenceTypes)&&($.absenceTypes=e.indexBy($.absenceTypes,"id"))}function h(e){var t=C[e].dialog;return{title:"Confirm "+t.title+"?",copyCancel:"Cancel",copyConfirm:t.btnLabel,classConfirm:"btn-"+t.btnClass,msg:t.msg,onConfirm:function(){return $.leaveRequest[e]().then(function(){b(e)}).catch(function(e){c.error("Error:",e)})}}}function v(e,t,n,a,r){e.stopPropagation(),o.openModal(t,n,a,r)}function b(t){var n=e.find($.leaveRequestStatuses,function(e){return e.name===u.statusNames.awaitingApproval}).value;_===n&&i.publish("ManagerBadge:: Update Count"),i.publish("LeaveRequest::statusUpdate",{status:t,leaveRequest:$.leaveRequest})}function g(){var t=$.leaveRequestStatuses[$.leaveRequest.status_id].name,n=e.compact(e.map(C,function(n,a){return e.includes(n.allowedStatuses,t)?a:null}));!m(t)&&e.pull(n,"cancel"),"admin"!==$.role&&e.pull(n,"delete"),"staff"===$.role&&e.pull(n,"approve","reject"),"staff"!==$.role&&y(n),d()&&n.push("delete"),$.allowedActions=e.map(n,function(e){return{key:e,label:C[e].label,isDirectAction:C[e].isDirectAction}})}function y(t){e.each(t,function(n,a){"edit"===n&&(t[a]="respond"),e.includes(["respond","view"],n)&&(t[a]="edit")})}n.debug("Component: leave-request-action-dropdown");var _,$=this,q=u.statusNames,C={edit:{label:"Edit",allowedStatuses:[q.awaitingApproval]},respond:{label:"Respond",allowedStatuses:[q.moreInformationRequired]},view:{label:"View",allowedStatuses:[q.approved,q.rejected,q.cancelled]},approve:{label:"Approve",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Approval",btnClass:"success",btnLabel:"Approve",msg:"Please confirm approval"}},reject:{label:"Reject",isDirectAction:!0,allowedStatuses:[q.awaitingApproval],dialog:{title:"Rejection",btnClass:"warning",btnLabel:"Reject",msg:"Please confirm rejection"}},cancel:{label:"Cancel",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.approved,q.rejected,q.moreInformationRequired],dialog:{title:"Cancellation",btnClass:"danger",btnLabel:"Confirm",msg:"Please confirm cancellation"}},delete:{label:"Delete",isDirectAction:!0,allowedStatuses:[q.awaitingApproval,q.moreInformationRequired,q.approved,q.rejected,q.cancelled],dialog:{title:"Deletion",btnClass:"danger",btnLabel:"Confirm",msg:"This cannot be undone"}}};$.allowedActions=[],$.action=l,$.openLeavePopup=v,function(){p(),g()}()}n.component("leaveRequestActions",{bindings:{leaveRequest:"<",leaveRequestStatuses:"<",absenceTypes:"<",role:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-actions.html"}],controllerAs:"actions",controller:a}),a.$inject=["$log","$rootScope","dialog","LeavePopup","LeaveRequestService","pubSub","shared-settings","notificationService"]}),define("leave-absences/shared/components/leave-request-popup-comments-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/hr-settings","common/models/session.model"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){$.request.comments.push({contact_id:_,leave_request_id:$.request.id,text:$.comment.text}),$.comment.text=""}function l(){return $.comment.text.length>0}function d(e){return!e.comment_id||$.canManage}function m(e){return t.utc(e,s.serverDateTimeFormat).local().format(o.DATE_FORMAT.toUpperCase()+" HH:mm")}function f(){return $.request.comments.filter(function(e){return!e.toBeDeleted})}function p(e){return e===_?"Me":$.comment.contacts[e]?$.comment.contacts[e].display_name:void 0}function h(e){return $.mode===e}function v(){$.comment.text.length&&$.addComment()}function b(){var t=e.indexBy($.request.comments,"contact_id"),n=Object.keys(t);return i.all({id:{IN:n}},{page:1,size:0}).then(function(t){$.comment.contacts=e.indexBy(t.list,"contact_id")})}function g(){return $.request.loadComments().then(function(){a.$broadcast("LeaveRequestPopup::requestObjectUpdated"),$.request.comments.length&&b()})}function y(){return $.loading.component=!0,u.get().then(function(e){_=e.contactId}).then(function(){$.loading.component=!1})}n.debug("Component: leave-request-popup-comments-tab");var _=null,$=this;$.loading={component:!0},$.comment={text:"",contacts:{}},$.addComment=c,$.canRemoveComment=d,$.canSubmit=l,$.formatDateTime=m,$.getActiveComments=f,$.getCommentorName=p,$.isMode=h,$.onBeforeSubmit=v,function(){r.$emit("LeaveRequestPopup::addTab",$),g(),y()}()}n.component("leaveRequestPopupCommentsTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-comments-tab.html"}],controllerAs:"commentsCtrl",controller:["$log","$rootScope","$scope","HR_settings","shared-settings","Contact","Session",a]})}),define("leave-absences/shared/components/leave-request-popup-details-tab.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/models/session.model","leave-absences/shared/models/calendar.model"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l,d,m){function f(){te.balance.closing=te.balance.opening+te.balance.change.amount}function p(e){return t(e,u.serverDateFormat).toDate()}function h(e){return t(e).format(u.serverDateFormat)}function v(e){var t;return s.resolve().then(function(){N(e),"from"===e&&F(),I("hours")&&(y(e),"from"!==e||te.uiOptions.multipleDays||y("to")),te.loading[e+"DayTypes"]=!0}).then(function(){return $(e)}).then(function(e){if(t=e.id!==te.period.id,t&&(te.period=e),!te.period.id)return s.reject("Please change date as it is not in any absence period")}).then(H).then(function(){if(t)return L()}).then(function(){return te.onDateChangeExtended&&te.onDateChangeExtended(e)}).then(function(){if(G(),!t)return k();r.$broadcast("LeaveRequestPopup::absencePeriodChanged")}).catch(A).finally(_)}function b(){return G(),k()}function g(){return te.uiOptions.toDate=null,N("to"),s.resolve().then(G).then(te.setDaysSelectionModeExtended).then(_).then(!te.uiOptions.multipleDays&&k)}function y(e){te.uiOptions.times[e].loading=!0}function _(){["from","to"].forEach(function(e){te.loading[e+"DayTypes"]=!1,I("hours")&&(te.uiOptions.times[e].loading=!1)})}function $(n){var a=t(te.uiOptions[n+"Date"]).format(te.uiOptions.userDateFormat.toUpperCase());return e.find(te.absencePeriods,function(e){return e.isInPeriod(a)})||{}}function q(){return te.request?te.request.request_type:te.leaveType||null}function C(e){return t().set({hours:e.split(":")[0],minutes:e.split(":")[1]})}function w(){return z(),te.loading.balanceChange=!0,te.request.getBalanceChangeBreakdown().then(U).catch(A)}function A(t){r.$broadcast("LeaveRequestPopup::handleError",e.isArray(t)?t:[t]),te.loading.fromDayTypes=!1,te.loading.balanceChange=!1,te.loading.tab=!1,te.loading.toDayTypes=!1}function T(){return te.isMode("create")||te.forceRecalculateBalanceChange?k():w()}function D(){var e=te.request.attributes();return te.uiOptions.fromDate=p(te.request.from_date),te.request.to_date=e.to_date,te.request.to_date_type=e.to_date_type,te.uiOptions.toDate=p(te.request.to_date),te.initDayTypesExtended?te.initDayTypesExtended():s.resolve()}function P(){ee.push(r.$on("LeaveRequestPopup::absenceTypeChanged",function(){J()}),r.$on("LeaveRequestPopup::absencePeriodBalancesUpdated",function(e,t){K(t)}),r.$on("LeaveRequestPopup::recalculateBalanceChange",k))}function S(){te.isMode("edit")&&(te.isLeaveStatus(u.statusNames.approved)||te.isLeaveStatus(u.statusNames.adminApproved))&&(Z={absenceTypeId:te.request.type_id,value:te.selectedAbsenceType.remainder-te.request.balance_change})}function R(){r.$watch(function(){return te.uiOptions.times.from.time},function(e,t){e!==t&&(te.uiOptions.multipleDays||(Q(e),G()))})}function I(e){return te.selectedAbsenceType.calculation_unit_name===e}function x(e){return te.request.request_type===e}function O(t){return e.includes(["weekend","non_working_day","public_holiday"],t)}function E(){return l.valuesOf("hrleaveandabsences_leave_request_day_type").then(function(e){te.requestDayTypes=e})}function L(){return c.get(te.request.contact_id,te.period.start_date,te.period.end_date).then(function(e){te.calendar=e})}function M(){var e=(te.pagination.currentPage-1)*te.pagination.numPerPage,t=e+te.pagination.numPerPage;te.pagination.filteredbreakdown=te.balance.change.breakdown.slice(e,t)}function k(){return z(),te.canCalculateChange()?(te.loading.balanceChange=!0,te.request.change_balance=!0,te.calculateBalanceChange().then(U).catch(A).finally(function(){te.loading.balanceChange=!1})):s.resolve()}function j(){te.pagination.totalItems=te.balance.change.breakdown.length,te.pagination.filteredbreakdown=te.balance.change.breakdown,te.pagination.pageChanged()}function B(){return h(te.request.from_date)===h(te.request.to_date)}function F(){te.uiOptions.toDate&&te.uiOptions.fromDate&&te.uiOptions.multipleDays&&t(te.uiOptions.toDate).isSameOrBefore(te.uiOptions.fromDate)&&(te.uiOptions.toDate=null,N("to"))}function N(e){te.resetUIInputsExtended&&te.resetUIInputsExtended(e),G(),z()}function U(e){te.balance.change=e,te.request.balance_change=e.amount,f(),j(),te.loading.balanceChange=!1}function H(){var e,n,a;te.uiOptions.fromDate?(e=t(te.uiOptions.fromDate).add(1,"day").toDate(),a=e,n=e):(a=p(te.period.start_date),n=te.uiOptions.date.to.options.minDate),te.uiOptions.date.to.options.initDate=n,te.uiOptions.date.to.options.minDate=a,te.uiOptions.date.to.options.maxDate=p(te.period.end_date)}function W(){return!te.isMode("create")&&B()||te.isMode("create")&&(x("sickness")||I("hours"))?te.uiOptions.multipleDays=!1:te.uiOptions.multipleDays=!0,s.resolve().then(te.setDaysSelectionModeExtended)}function V(){Z&&Z.absenceTypeId===te.selectedAbsenceType.id?te.balance.opening=Z.value||0:te.balance.opening=te.selectedAbsenceType.remainder}function Y(){te.selectedAbsenceType=e.find(te.absenceTypes,function(e){return e.id===te.request.type_id})}function G(){var e=te.uiOptions,t=e.times;te.request.from_date=e.fromDate?h(e.fromDate):null,te.request.to_date=e.toDate?h(e.toDate):null,!e.multipleDays&&e.fromDate&&(te.request.to_date=te.request.from_date,te.request.to_date_type=te.request.from_date_type),(I("hours")||x("toil"))&&(te.request.from_date=te.request.from_date&&t.from.time?te.request.from_date+" "+t.from.time:null,te.request.to_date=te.request.to_date&&t.to.time?te.request.to_date+" "+t.to.time:null)}function z(){te.uiOptions.showBalance=te.canCalculateChange()}function X(){e.forEach(ee,function(e){e()})}function J(){var e,t=te.selectedAbsenceType.calculation_unit_name;return Y(),e=t!==te.selectedAbsenceType.calculation_unit_name,V(),s.resolve().then(e&&W).then(e&&te.onAbsenceTypeUpdateExtended).then(e&&G).then(_).then(k)}function K(e){return te.absenceTypes=e,Y(),t(te.uiOptions.toDate).isAfter(te.period.end_date)&&(te.uiOptions.toDate=void 0,N("to")),V(),k()}function Q(e){var t=C(e).add(te.uiOptions.time_interval,"minutes");t.isAfter(C(te.uiOptions.times.to.max))||(te.uiOptions.times.to.min=t.format("HH:mm"),t.isAfter(C(te.uiOptions.times.to.time))&&(te.uiOptions.times.to.time=""))}a.debug("Component: leave-request-popup-details-tab");var Z=null,ee=[],te=this;te.canManage=!1,te.calendar={},te.errors=[],te.isRequired=!0,te.requestDayTypes=[],te.statusNames=u.statusNames,te.loading={tab:!1,balanceChange:!1,fromDayTypes:!1,toDayTypes:!1},te.pagination={currentPage:1,filteredbreakdown:te.balance.change.breakdown,numPerPage:7,totalItems:te.balance.change.breakdown.length,pageChanged:M},te.uiOptions={isChangeExpanded:!1,multipleDays:!0,userDateFormat:i.DATE_FORMAT,showBalance:!1,date:{from:{show:!1,options:{startingDay:1,showWeeks:!1}},to:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}},expiry:{show:!1,options:{minDate:null,maxDate:null,startingDay:1,showWeeks:!1}}},times:{from:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""},to:{amount:0,amountExpanded:!1,loading:!1,max:"00:00",maxAmount:0,min:"00:00",time:""}},time_interval:15},te.convertDateFormatFromServer=p,te.convertDateToServerFormat=h,te.dateChangeHandler=v,te.dateTypeChangeHandler=b,te.daysSelectionModeChangeHandler=g,te.disableAndShowLoadingTimeInput=y,te.getMomentDateWithGivenTime=C,te.handleError=A,te.isCalculationUnit=I,te.isLeaveType=x,te.isNotWorkingDay=O,te.performBalanceChangeCalculation=k,te.setRequestDateTimesAndDateTypes=G,te.updateEndTimeInputMinTime=Q,te.$onDestroy=X,function(){n("RequestModalDetails"+e.capitalize(q(te.leaveType,te.request))+"Controller",{detailsController:te}),te.canManage=te.isRole("manager")||te.isRole("admin"),te.loading.tab=!0,o.$emit("LeaveRequestPopup::addTab",te),P(),te.initChildController().then(function(){return s.all([L(),E()])}).then(!te.isMode("create")&&D).then(W).then(function(){if(!te.isMode("create"))return s.resolve().then(te.initTimesExtended).then(G)}).then(!te.isMode("create")&&H).then(S).then(V).then(T).then(R).then(!te.isMode("view")&&te.initWatchersExtended).catch(A).finally(function(){te.loading.tab=!1})}()}n.component("leaveRequestPopupDetailsTab",{bindings:{absencePeriods:"<",absenceTypes:"<",balance:"=",request:"<",isLeaveStatus:"<",leaveType:"<",isMode:"<",isSelfRecord:"<",period:"=",isRole:"<",selectedAbsenceType:"=",forceRecalculateBalanceChange:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-details-tab.html"}],controllerAs:"detailsTab",controller:a}),a.$inject=["$controller","$log","$rootScope","$scope","$q","HR_settings","shared-settings","Calendar","OptionGroup","LeaveRequest","$timeout"]}),define("leave-absences/shared/components/leave-request-popup-files-tab",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/file-upload","common/services/file-mime-types","common/services/hr-settings"],function(e,t,n){function a(n,a,r,o,s,i,u,c,l){function d(){return R.fileUploader&&R.fileUploader.queue.length>0}function m(){return R.getFilesAmount()0?D.map(function(e){return e.label}).join(", "):""}function $(){return R.request.loadAttachments().then(function(){r.$broadcast("LeaveRequestPopup::requestObjectUpdated")})}function q(){return a.all(D.map(function(e){return l.getMimeTypeFor(e.label).then(function(t){S[e.label]=t})})).catch(function(){S=null})}function C(){return u.valuesOf("safe_file_extension").then(function(e){D=e})}function w(e){return!e.attachment_id||R.canManage}function A(){e.forEach(P,function(e){e()})}function T(e,t){R.fileUploader.queue&&R.fileUploader.queue.length>0?R.fileUploader.uploadAll({entityID:R.request.id}).then(function(){t()}).catch(t):t()}n.debug("Component: leave-request-popup-files-tab");var D=[],P=[],S={},R=Object.create(this);return R.filesLoaded=!1,R.fileUploader=null,R.today=Date.now(),R.userDateFormatWithTime=s.DATE_FORMAT+" HH:mm",R.userDateFormat=s.DATE_FORMAT,R.$onDestroy=A,R.canRemoveAttachment=w,R.canSubmit=d,R.canUploadMore=m,R.formatDateTime=f,R.getAuthorName=p,R.getFilesAmount=h,R.listFileTypes=_,function(){r.$broadcast("LeaveRequestPopup::childComponent::register"),o.$emit("LeaveRequestPopup::addTab",R),g(),a.all([C(),$()]).then(y).finally(function(){R.filesLoaded=!0})}(),R}n.component("leaveRequestPopupFilesTab",{bindings:{canManage:"<",mode:"<",request:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-popup/leave-request-popup-files-tab.html"}],controllerAs:"filesTab",controller:["$log","$q","$rootScope","$scope","HR_settings","shared-settings","OptionGroup","FileUpload","fileMimeTypes",a]})}),define("leave-absences/shared/components/leave-request-record-actions.component",["leave-absences/shared/modules/components","common/services/hr-settings","common/services/before-hash-query-params.service"],function(e){function t(e,t,n){function a(e,n,a,r){t.openModal.apply(t,arguments)}e.debug("Component: leave-request-record-actions");var r,o=this;o.leaveRequestOptions=[{type:"leave",icon:"briefcase",label:"Leave"},{type:"sickness",icon:"stethoscope",label:"Sickness"}],o.openLeavePopup=a,function(){r=n.parse(),r.openModal&&a(null,r.openModal,o.selectedContactId,o.isSelfRecord)}()}e.component("leaveRequestRecordActions",{bindings:{contactId:"<",isSelfRecord:"<",selectedContactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/leave-request-record-actions.html"}],controllerAs:"vm",controller:["$log","LeavePopup","beforeHashQueryParams",t]})}),define("leave-absences/shared/components/staff-leave-report.component",["common/lodash","common/moment","leave-absences/shared/modules/components","common/services/pub-sub"],function(e,t,n){function a(t,n,a,r,o,s,i,u,c,l,d,m){function f(e,t){t.data.push(e),t.dataIndex[e.id]=e}function p(){Y.absenceTypes=Y.absenceTypes.map(function(t){var n=e.find(Y.entitlements,function(e){return e.type_id===t.id});return t.entitlement=n?n.value:0,t.remainder=n?n.remainder:{current:0,future:0},t})}function h(e){F(e),Y.sections.other.open&&f(e,Y.sections.other)}function v(){Object.values(Y.sections).forEach(function(e){e.data=[]})}function b(){Y.absenceTypesFiltered=Y.absenceTypes.filter(function(e){return!(0===e.entitlement&&"1"!==e.allow_overuse&&"1"!==e.allow_accruals_request)})}function g(e){var t=V[e.status];t?t(e.leaveRequest):Y.refresh()}function y(t){t.dataIndex=e.indexBy(t.data,"id")}function _(e){return e.current?"Current Period ("+e.title+")":e.title}function $(){return o.all().then(function(t){Y.absencePeriods=e.sortBy(t,"start_date"),Y.selectedPeriod=e.find(Y.absencePeriods,function(e){return!0===e.current})})}function q(){return s.all().then(s.loadCalculationUnits).then(function(t){Y.absenceTypes=t,Y.absenceTypesIndexed=e.indexBy(t,"id")})}function C(){return S("approved",{status_id:W(m.statusNames.approved)})} +function w(){var t={contact_id:Y.contactId,period_id:Y.selectedPeriod.id};return n.all([u.balanceChangeByAbsenceType(e.assign({},t,{public_holiday:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{expired:!0})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.approved)]}})),u.balanceChangeByAbsenceType(e.assign({},t,{statuses:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}}))]).then(function(e){Y.absenceTypes.forEach(function(t){t.balanceChanges={holidays:e[0][t.id],expired:e[1][t.id],approved:e[2][t.id],pending:e[3][t.id]}})})}function A(){return i.all({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},!0).then(function(e){Y.entitlements=e})}function T(){return i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id},Y.entitlements).then(function(){return k(Y.entitlements)}).then(function(e){Y.sections.entitlements.data=e})}function D(){return n.all([i.breakdown({contact_id:Y.contactId,period_id:Y.selectedPeriod.id,expired:!0}),P({request_type:"toil",expired:!0})]).then(function(e){return n.all({expiredBalanceChangesFlatten:k(e[0]),expiredTOILS:j(e[1].list)})}).then(function(t){Y.sections.expired.data=t.expiredBalanceChangesFlatten.concat(t.expiredTOILS),Y.sections.expired.data=e.sortBy(Y.sections.expired.data,"expiry_date")})}function P(t){return u.all(e.assign({contact_id:Y.contactId,from_date:{from:Y.selectedPeriod.start_date},to_date:{to:Y.selectedPeriod.end_date},type_id:{IN:Y.absenceTypes.map(function(e){return e.id})}},t),null,"from_date ASC",null,!1)}function S(e,t){return P(t).then(function(t){Y.sections[e].data=t.list})}function R(){return n.all(Object.values(Y.sections).filter(function(e){return e.open}).map(E))}function I(){return S("other",{status_id:{in:[W(m.statusNames.rejected),W(m.statusNames.cancelled)]}})}function x(){return S("pending",{status_id:{in:[W(m.statusNames.awaitingApproval),W(m.statusNames.moreInformationRequired)]}})}function O(){return S("holidays",{public_holiday:!0})}function E(e){return e.loading=!0,e.loadLeaveRequests().then(y.bind(this,e)).then(function(){e.loading=!1})}function L(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(t){Y.leaveRequestStatuses=e.indexBy(t,"value")})}function M(){p(),b()}function k(t){return n.resolve().then(function(){return t.map(function(t){var n=e.find(Y.entitlements,function(e){return e.id===t.id});return t.breakdown.map(function(t){return e.assign(e.clone(t),{type_id:n.type_id})})})}).then(function(e){return Array.prototype.concat.apply([],e)})}function j(t){return n.resolve().then(function(){return t.map(function(t){return e.assign({},t,{expiry_date:t.toil_expiry_date,amount:t.toil_to_accrue,type:{label:"Accrued TOIL"}})})})}function B(){l.subscribe("LeaveRequest::new",function(){Y.refresh()}),l.subscribe("LeaveRequest::edit",function(){Y.refresh()}),l.subscribe("LeaveRequest::statusUpdate",g),l.subscribe("LeaveRequest::delete",function(e){F(e)})}function F(t){e.forEach(Y.sections,function(n,a){n.dataIndex[t.id]&&(e.remove(n.data,function(e){return e.id===t.id}),delete n.dataIndex[t.id],"other"!==a&&N(t,a))})}function N(t,n){var a=["future","current"],r=Y.absenceTypesIndexed[t.type_id];"pending"===n&&e.pull(a,"current"),r.balanceChanges[n]-=t.balance_change,a.forEach(function(e){r.remainder[e]-=t.balance_change})}function U(){Y.loading.content=!0,n.all([A(),w()]).then(M).then(function(){Y.loading.content=!1}).then(function(){return n.all([R(),v()])})}function H(e){var t=Y.sections[e];t.open=!t.open,t.open&&!t.data.length&&E(t)}function W(t){return e.find(Y.leaveRequestStatuses,function(e){return e.name===t}).value}t.debug("Component: staff-leave-report");var V={delete:F,cancel:h},Y=this;Y.absencePeriods=[],Y.absenceTypes=[],Y.absenceTypesFiltered=[],Y.absenceTypesIndexed={},Y.dateFormat=d.DATE_FORMAT,Y.leaveRequestStatuses={},Y.selectedPeriod=null,Y.role="absence-tab"===a.section?"admin":"staff",Y.loading={content:!0,page:!0},Y.sections={approved:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:C},entitlements:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:T},expired:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:D},holidays:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:O},pending:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:x},other:{open:!1,data:[],dataIndex:{},loading:!1,loadLeaveRequests:I}},Y.labelPeriod=_,Y.refresh=U,Y.toggleSection=H,function(){n.all([L(),q(),$()]).then(function(){Y.loading.page=!1}).then(function(){return n.all([A(),w()])}).then(M).then(function(){Y.loading.content=!1}),B()}()}n.component("staffLeaveReport",{bindings:{contactId:"<"},templateUrl:["shared-settings",function(e){return e.sharedPathTpl+"components/staff-leave-report.html"}],controllerAs:"report",controller:["$log","$q","$rootScope","checkPermissions","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","OptionGroup","pubSub","HR_settings","shared-settings",a]})}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return s.request.calculateBalanceChange(s.selectedAbsenceType.calculation_unit_name)}function l(){var e=s.request,t=!!e.from_date&&!!e.to_date,n=s.selectedAbsenceType.calculation_unit_name;return"days"===n?t=t&&!!e.from_date_type&&!!e.to_date_type:"hours"===n&&(t=t&&!isNaN(+e.from_date_amount)&&!isNaN(+e.to_date_amount)),t}function d(){return s.canCalculateChange()}function m(t,n){var a=s.uiOptions.times[t],r=e.clone(n.time_from),o=e.clone(n.time_to);s.uiOptions.multipleDays||("from"===t&&o&&r&&(o=s.getMomentDateWithGivenTime(o).subtract(s.uiOptions.time_interval,"minutes").format("HH:mm")),"to"===t&&r&&o&&(r=s.getMomentDateWithGivenTime(r).add(s.uiOptions.time_interval,"minutes").format("HH:mm"))),a.min=r||"00:00",a.max=o||"00:00",a.time="to"===t?a.max:a.min}function f(t,n){return t?(t=s.convertDateToServerFormat(t),v(t).then(function(n){return n?s.requestDayTypes.filter(function(e){return"public_holiday"===e.name}):p(t,s.requestDayTypes).then(function(t){return t.length?t:s.requestDayTypes.filter(function(t){return e.includes(["all_day","half_day_am","half_day_pm"],t.name)})})}).then(function(e){return P(n,e),e})):r.reject([])}function p(e,n){return e=t(e),r.all([s.calendar.isNonWorkingDay(e),s.calendar.isWeekend(e)]).then(function(e){return e[0]?"non_working_day":e[1]?"weekend":null}).then(function(e){return e?n.filter(function(t){return t.name===e}):[]})}function h(e,n){return t.duration(n).subtract(t.duration(e)).asHours()}function v(e){return u.all({public_holiday:1,contact_id:s.request.contact_id,from_date:{from:e},to_date:{to:e}}).then(function(e){return!!e.list.length})}function b(){return r.resolve()}function g(){return w(s.uiOptions.fromDate,"from").then(function(){return w(s.uiOptions.toDate,"to")})}function y(e){o.$watch(function(){return s.uiOptions.times[e].amount},function(e,t){s.isCalculationUnit("days")||+e==+t||(s.isRole("staff")&&(s.request.change_balance=!0),I(),s.performBalanceChangeCalculation())})}function _(e){var n=t(s.request[e+"_date"]).format("HH:mm"),a=s.uiOptions.times[e];(h(a.min,n)<=0||h(a.max,n)>=0)&&(n="from"===e?a.min:a.max),s.uiOptions.times[e].time=n}function $(){var e=s.uiOptions.multipleDays?["from","to"]:["from"],t=s.uiOptions.times;if(s.isCalculationUnit("hours"))return r.all(e.map(T)).then(function(){["from","to"].forEach(function(e){_(e),R(e),t[e].amount=Math.min(s.request[e+"_date_amount"],t[e].maxAmount).toString()}),s.uiOptions.multipleDays||s.updateEndTimeInputMinTime(s.uiOptions.times.from.time)}).then(I)}function q(){["from","to"].forEach(function(e){y(e),C(e)})}function C(e){o.$watch(function(){return s.uiOptions.times[e].time},function(t,n){s.isCalculationUnit("days")||t===n||(s.setRequestDateTimesAndDateTypes(),t&&R(e,!0))})}function w(e,t){return f(e,t).then(function(){s.loading[t+"DayTypes"]=!1})}function A(e){return w(s.uiOptions[e+"Date"],e).then(function(){if(s.isCalculationUnit("hours"))return T(e).then(function(){R(e,!0)})})}function T(e){var t=s.uiOptions[e+"Date"],n=!s.uiOptions.multipleDays;return t?s.request.getWorkDayForDate(s.convertDateToServerFormat(t)).then(function(t){O[e]=t,m(e,t),n&&"from"===e&&m("to",t)}).catch(function(t){return O[e]={},s.handleError(t)}).finally(function(){s.uiOptions.times[e].loading=!1,n&&(s.uiOptions.times.to.loading=!1)}):r.resolve()}function D(t){var n=s.uiOptions.times[t];s["request"+e.startCase(t)+"DayTypes"]=[],n.time="",n.min="00:00",n.max="00:00",n.amount="0",n.maxAmount="0"}function P(t,n){var a="request"+e.startCase(t)+"DayTypes";s[a]=n,s.isMode("create")&&(s.request[t+"_date_type"]=s[a][0].value)}function S(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?(s.disableAndShowLoadingTimeInput("from"),!s.uiOptions.multipleDays&&s.disableAndShowLoadingTimeInput("to"),T("from").then(function(){R("from",!0)})):r.resolve()}function R(e,t){var n=s.uiOptions,a=n.multipleDays?e:"from",r=n.times[a],o=n.multipleDays&&"to"===a?r.min:n.times.from.time,i=n.multipleDays&&"from"===a?r.max:n.times.to.time,u=O[a].number_of_hours?h(o,i).toString():"0";r.maxAmount=u,t&&(r.amount=r.maxAmount)}function I(){var e=s.uiOptions.times;s.request.from_date_amount=isNaN(+e.from.amount)?null:e.from.amount,s.request.to_date_amount=isNaN(+e.to.amount)?null:e.to.amount}function x(){return s.isCalculationUnit("hours")&&s.uiOptions.fromDate?T("from").then(function(){R("from",!0)}):r.resolve()}var O={};a.debug("RequestModalDetailsLeaveController"),s.calculateBalanceChange=c,s.canCalculateChange=l,s.canSubmit=d,s.initChildController=b,s.initDayTypesExtended=g,s.initTimesExtended=$,s.initWatchersExtended=q,s.onAbsenceTypeUpdateExtended=x,s.onDateChangeExtended=A,s.resetUIInputsExtended=D,s.setDaysSelectionModeExtended=S}n.controller("RequestModalDetailsLeaveController",a),a.$inject=["$controller","$log","$q","$rootScope","detailsController","PublicHoliday","LeaveRequest"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller",["common/lodash","leave-absences/shared/modules/controllers"],function(e,t){function n(t,n,a,r,o,s,i){function u(){return!(!i.canCalculateChange()||!i.request.sickness_reason)}function c(){return a.all([m(),h(),f(!0)])}function l(t){var n=i.request.getDocumentArray();return!!e.find(n,function(e){return e===t})}function d(t){return!!e.find(i.sicknessDocumentTypes,function(e){return e.value===t})}function m(){return s.valuesOf("hrleaveandabsences_leave_request_required_document").then(function(e){i.sicknessDocumentTypes=e})}function f(t){return s.valuesOf("hrleaveandabsences_sickness_reason",t).then(function(t){i.sicknessReasons=e.indexBy(t,"name")})}function p(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_sickness_reason?reset=1").on("crmUnload",function(){f(!1)})}function h(){i.showSicknessOptionsEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}n.debug("RequestModalDetailsSicknessController"),t("RequestModalDetailsLeaveController",{detailsController:i}),i.canSubmit=u,i.initChildController=c,i.isChecked=l,i.isDocumentInRequest=d,i.openSicknessReasonOptionsEditor=p}t.controller("RequestModalDetailsSicknessController",n),n.$inject=["$controller","$log","$q","$rootScope","crmAngService","api.optionGroup","detailsController"]}),define("leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller",["common/lodash","common/moment","leave-absences/shared/modules/controllers"],function(e,t,n){function a(n,a,r,o,s,i,u){function c(){return u.balance.change.amount=+u.request.toil_to_accrue,a.resolve(u.balance.change)}function l(){if(!u.request.from_date||!u.request.to_date)return u.uiOptions.max_toil_duration_and_accrual=null,void(u.uiOptions.toil_duration_in_hours=null);u.uiOptions.max_toil_duration_and_accrual=t.duration(t(u.request.to_date).diff(u.request.from_date)).asHours()}function d(){return v().catch(function(e){return e.length&&(u.errors=e),a.reject(e)}).then(function(e){return i.calculateToilExpiryDate(u.request.type_id,e)}).then(function(e){return u.request.toil_expiry_date=e,u.uiOptions.expiryDate=new Date(e),e})}function m(){return!!u.request.toil_to_accrue}function f(){var e=u.uiOptions.multipleDays&&!!u.request.to_date,t=!u.uiOptions.multipleDays&&!!u.request.from_date,n=t||e,a=N.from_date!==u.request.from_date||N.to_date!==u.request.to_date;return u.canDisplayToilExpirationField&&n&&H.hasExpirationFromAdminSettings&&a}function p(){return!!(u.request.from_date&&u.request.to_date&&u.request.toil_duration&&u.request.toil_to_accrue)}function h(){u.request.toil_expiry_date=!1,u.uiOptions.expiryDate=null}function v(){var e=u.uiOptions.multipleDays,t=u.request;return b({hasErrors:e?!t.to_date&&!t.from_date:!t.from_date,label:e?"To Date":"From Date",value:t.to_date})}function b(e){if(e.hasErrors){var n="Please select "+e.label+" to find expiry date";return a.reject([n])}return e.value?a.resolve(t(e.value).format("YYYY-MM-DD")):a.reject([])}function g(){var e=u.isMode("create")&&H.hasExpirationFromAdminSettings,t=H.hasPreviousExpirationDate,n=u.isLeaveType("toil"),a=u.canManage;u.canDisplayToilExpirationField=n&&(a||e||t)}function y(){u.uiOptions.toil_duration_in_hours=u.request.toil_duration/60}function _(){return H.hasPreviousExpirationDate=u.isMode("edit")&&!!u.request.toil_expiry_date,i.canExpire(u.request.type_id).then(function(e){H.hasExpirationFromAdminSettings=e})}function $(){return u.request.to_date_type=u.request.from_date_type="1",_().then(g).then(q).then(P)}function q(){u.canManage&&(u.uiOptions.expiryDate=u.convertDateFormatFromServer(u.request.toil_expiry_date))}function C(){r.$watch(function(){return u.request.toil_to_accrue},function(e,t){+e!=+t&&u.performBalanceChangeCalculation()})}function w(){r.$watch(function(){return u.uiOptions.toil_duration_in_hours},function(e,t){e!==t&&u.isCalculationUnit("hours")&&x(),u.request.toil_duration=u.uiOptions.toil_duration_in_hours?60*u.uiOptions.toil_duration_in_hours:null})}function A(){var e=u.uiOptions.times;e.from.time=t(u.request.from_date).format("HH:mm"),e.to.time=t(u.request.to_date).format("HH:mm"),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time)}function T(){["from","to"].forEach(function(e){r.$watch(function(){return u.uiOptions.times[e].time},function(e,t){e!==t&&(u.setRequestDateTimesAndDateTypes(),B(),l(),O())})})}function D(){u.isMode("view")||(C(),w(),T())}function P(t){return s.valuesOf("hrleaveandabsences_toil_amounts",t).then(function(t){u.toilAmounts=e.sortBy(t,function(e){return+e.weight})})}function S(){return l(),O(),B()}function R(){return L(),u.uiOptions.multipleDays||u.updateEndTimeInputMinTime(u.uiOptions.times.from.time),l(),U?U=!1:O(),B()}function I(e){u.uiOptions.times[e].time=""}function x(){u.request.toil_to_accrue=u.uiOptions.toil_duration_in_hours}function O(){u.uiOptions.toil_duration_in_hours=u.uiOptions.max_toil_duration_and_accrual}function E(){N=e.cloneDeep(u.request.attributes())}function L(){u.uiOptions.multipleDays?["from","to"].forEach(function(e){u.uiOptions.times[e].min="00:00",u.uiOptions.times[e].max="23:45"}):(u.uiOptions.times.from.min="00:00",u.uiOptions.times.from.max="23:30",u.uiOptions.times.to.min="00:15",u.uiOptions.times.to.max="23:45")}function M(){u.setRequestDateTimesAndDateTypes(),l(),O(),u.isCalculationUnit("hours")?x():u.request.toil_to_accrue=null}function k(){o.loadForm("/civicrm/admin/options/hrleaveandabsences_toil_amounts?reset=1").on("crmUnload",function(){P(!1)})}function j(){u.showTOILAccrualsOptionEditorIcon=e.includes(["admin-dashboard","absence-tab"],r.section)}function B(){return f()?d().catch(a.resolve):a.resolve()}function F(){u.uiOptions.expiryDate&&(u.request.toil_expiry_date=u.convertDateToServerFormat(u.uiOptions.expiryDate))}n.debug("RequestModalDetailsToilController");var N,U=!u.isMode("create"),H={hasPreviousExpirationDate:null,hasExpirationFromAdminSettings:null};u.canDisplayToilExpirationField=!1,u.calculateBalanceChange=c,u.canCalculateChange=m,u.canSubmit=p,u.clearExpiryDate=h,u.initChildController=$,u.initTimesExtended=A,u.initWatchersExtended=D,u.onAbsenceTypeUpdateExtended=M,u.onDateChangeExtended=S,u.openToilInDaysAccrualOptionsEditor=k,u.resetUIInputsExtended=I,u.setDaysSelectionModeExtended=R,u.updateExpiryDate=F,function(){E(),L(),j(),!u.isMode("create")&&y()}()}n.controller("RequestModalDetailsToilController",a),a.$inject=["$log","$q","$rootScope","crmAngService","OptionGroup","AbsenceType","detailsController"]}),define("leave-absences/shared/services/leave-calendar.service",["common/lodash","common/moment","leave-absences/shared/modules/services"],function(e,t,n){"use strict";function a(n,a,r,o){function s(n){function s(){return r.all().then(function(e){return e.list})}function i(){return u().then(function(a){var r=a.filter(function(e){var a=e.info.details;return t(a.period_start_date).isSameOrBefore(n.selectedPeriod.end_date)&&(t(a.period_end_date).isSameOrAfter(n.selectedPeriod.start_date)||!a.period_end_date)});return e.uniq(r.map(function(e){return e.contact_id}))})}function u(){return d?a.resolve(d):o.all()}function c(){return r.all(l(),null,"display_name").then(function(e){return e.list})}function l(){var t={department:e.get(n,"filters.userSettings.department.value",null),level_type:e.get(n,"filters.userSettings.level_type.value",null),location:e.get(n,"filters.userSettings.location.value",null),region:e.get(n,"filters.userSettings.region.value",null)},a=!!n.filters.userSettings.contact,r=e.isArray(n.lookupContacts)&&n.lookupContacts.length;return a?t.id={IN:[n.filters.userSettings.contact.id]}:r&&(t.id={IN:e.pluck(n.lookupContacts,"id")}),t}var d;return{loadAllLookUpContacts:s,loadContactIdsToReduceTo:i,loadFilteredContacts:c}}return n.debug("LeaveCalendarService"),{init:s}}n.factory("LeaveCalendarService",a),a.$inject=["$log","$q","Contact","Contract"]}),define("leave-absences/shared/instances/sickness-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("SicknessRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={sickness_reason:null,sickness_required_documents:"",request_type:"sickness"};return e.assign({},n.defaultCustomData(),t)},getDocumentArray:function(){return this.sickness_required_documents?this.sickness_required_documents.split(","):[]},toggleDocument:function(t){var n=this.getDocumentArray(),a=n.indexOf(t);e.contains(n,t)?n.splice(a,1):n.push(t),this.sickness_required_documents=n.join(",")},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/instances/toil-request.instance",["common/lodash","leave-absences/shared/modules/models-instances","leave-absences/shared/instances/leave-request.instance"],function(e,t){"use strict";t.factory("TOILRequestInstance",["LeaveRequestAPI","LeaveRequestInstance",function(t,n){return n.extend({defaultCustomData:function(){var t={from_date_amount:0,to_date_amount:0,request_type:"toil"};return e.assign({},n.defaultCustomData(),t)},toAPIFilter:function(t,n,a){e.includes(["balance_change","dates","comments","files"],a)||(t[a]=this[a])}})}])}),define("leave-absences/shared/controllers/request.controller",["common/angular","leave-absences/shared/modules/controllers","common/lodash","common/moment","common/models/contact","common/models/session.model","common/services/api/option-group","common/services/hr-settings","common/services/pub-sub","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/instances/leave-request.instance","leave-absences/shared/instances/sickness-request.instance","leave-absences/shared/instances/toil-request.instance","leave-absences/shared/services/leave-request.service"],function(e,t,n,a){"use strict";function r(t,r,o,s,i,u,c,l,d,m,f,p,h,v,b,g,y,_,$,q,C){function w(e){"days"===Le.selectedAbsenceType.calculation_unit_name?delete Le.request[e+"_date_amount"]:delete Le.request[e+"_date_type"]}function A(){["from","to"].forEach(w)}function T(){var e=Le.requestStatuses[_.statusNames.awaitingApproval].value;Se.status_id===e&&e!==Le.request.status_id&&d.publish("ManagerBadge:: Update Count")}function D(){return Ee.filter(function(e){return e.isRequired}).every(function(e){return e.canSubmit&&e.canSubmit()})}function P(){return Ee.filter(function(e){return!e.isRequired}).some(function(e){return e.canSubmit&&e.canSubmit()})}function S(){return!Le.loading.entitlements&&(!!oe("admin")||!ae("view")&&!(oe("manager")&&!ae("create")))}function R(){var e=D();return Le.isMode("edit")&&(e=e&&(V()||P())),Le.canManage&&Le.requestStatuses&&(e=e&&!!Le.getStatusFromValue(Le.newStatusOnSave)),(e=e&&!!Le.period.id)&&!Le.isMode("view")}function I(){Le.isSelfRecord?Le.request.status_id=Le.requestStatuses[_.statusNames.awaitingApproval].value:Le.canManage&&(Le.request.status_id=Le.newStatusOnSave||Le.request.status_id)}function x(){if(Le.isMode("edit")&&!Le.isRole("staff")&&"toil"!==N())return Le.request.calculateBalanceChange(Le.selectedAbsenceType.calculation_unit_name).then(function(e){if(+Le.balance.change.amount!=+e.amount)return C.promptBalanceChangeRecalculation().then(function(){o.$emit("LeaveRequestPopup::recalculateBalanceChange")}),r.reject()})}function O(){Le.errors=[]}function E(){return Le.request.create().then(qe).then(function(){fe("LeaveRequest::new")})}function L(){ee()&&!Le.isRole("staff")&&(Le.request.change_balance=!0)}function M(){l.open({title:"Confirm Deletion?",copyCancel:"Cancel",copyConfirm:"Confirm",classConfirm:"btn-danger",msg:"This cannot be undone",onConfirm:function(){return Le.request.delete().then(function(){Le.dismissModal(),d.publish("LeaveRequest::delete",Le.request)})}})}function k(){i.dismiss({$value:"cancel"})}function j(){var e=N();return"leave"===e?{is_sick:!1}:"sickness"===e?{is_sick:!0}:"toil"===e?{allow_accruals_request:!0}:void 0}function B(){return F(Le.getStatusFromValue(Le.request.status_id).name)}function F(e){return n.map(De[e],function(e){return Le.requestStatuses[e]})}function N(){return Le.request?Le.request.request_type:Le.leaveType||null}function U(){return!Le.request||e.equals({},Le.requestStatuses)?[]:Le.request.status_id?B():F("none")}function H(e){return n.find(Le.requestStatuses,function(t){return t.value===e})}function W(e){Le.errors=n.isArray(e)?e:[e],Le.loading.absenceTypes=!1,Le.submitting=!1}function V(){return!e.equals(Se,Le.request.attributes())||Le.canManage&&Le.newStatusOnSave}function Y(){return Le.postContactSelection=!0,Le.staffMemberSelectionComplete=!1,Le.request.contact_id?r.resolve().then(ie).then(ue).then(he).then(be).then(Z).then(z).then(Le.isMode("edit")?ge:n.noop).then(function(){Le.postContactSelection=!1,Le.staffMemberSelectionComplete=!0}).catch(function(e){if(e!==xe)return r.reject(e)}):r.reject("The contact id was not set")}function G(){var e=[_.statusNames.moreInformationRequired,_.statusNames.approved,_.statusNames.rejected,_.statusNames.cancelled];De.none=[_.statusNames.moreInformationRequired,_.statusNames.approved],De.awaiting_approval=e,De.more_information_required=e,De.rejected=e,De.approved=e,De.cancelled=[_.statusNames.awaitingApproval].concat(e)}function z(){return Le.canManage?f.find(Le.request.contact_id).then(function(e){Le.contactName=e.display_name}):r.resolve()}function X(){Re.push(o.$on("LeaveRequestPopup::requestObjectUpdated",ge),o.$on("LeaveRequestPopup::absencePeriodChanged",function(){ue().then(he).then(function(){o.$emit("LeaveRequestPopup::absencePeriodBalancesUpdated",Le.absenceTypes)})}),o.$on("LeaveRequestPopup::handleError",function(e,t){W(t)}),o.$on("LeaveRequestPopup::childComponent::register",function(){Pe++})),s.$on("$destroy",Ce),s.$on("LeaveRequestPopup::addTab",function(e,t){Ee.push(t)})}function J(){var e,t;Le.request=Le.leaveRequest||null,e=N(),t=Le.initRequestAttributes(),"leave"===e?Le.request=y.init(t):"sickness"===e?Le.request=$.init(t):"toil"===e&&(Le.request=q.init(t))}function K(){var e={};return Le.request?e=Le.request.attributes():Le.canManage||(e={contact_id:Ie}),e}function Q(){if(Oe="staff","my-leave"!==o.section)return u(_.permissions.admin.administer).then(function(e){e&&(Oe="admin")}).then(function(){return"staff"===Oe&&u(_.permissions.ssp.manage).then(function(e){e&&(Oe="manager")})}).finally(function(){Le.canManage=Le.isRole("manager")||Le.isRole("admin")})}function Z(){(Le.isRole("admin")||Le.isMode("create")&&Le.isRole("manager"))&&(Le.newStatusOnSave=Le.requestStatuses[_.statusNames.approved].value)}function ee(){return!Le.request.status_id||!n.includes(["cancelled","rejected"],H(Le.request.status_id).name)}function te(e){var t=Le.getStatusFromValue(Le.request.status_id);return!!t&&t.name===e}function ne(e){return Le.request&&Le.request.request_type===e}function ae(e){return Le.mode===e}function re(e,t){var n=a(e.from_date),r=a(e.to_date);return n.isSameOrAfter(t.start_date,"day")&&r.isSameOrBefore(t.end_date,"day")}function oe(e){return Oe===e}function se(){return h.all().then(function(e){Le.absencePeriods=e})}function ie(){return v.all(j()).then(v.loadCalculationUnits).then(function(e){Te={types:e,ids:e.map(function(e){return e.id})}})}function ue(){return Le.loading.entitlements=!0,b.all({contact_id:Le.request.contact_id,period_id:Le.period.id,type_id:{IN:Te.ids}},!0).finally(function(){Le.loading.entitlements=!1})}function ce(){return p.get().then(function(e){Ie=e.contactId})}function le(){return Le.selectedContactId?f.find(Le.selectedContactId).then(function(e){Le.managedContacts=[e]}):Le.isRole("admin")?f.all().then(function(e){Le.managedContacts=n.remove(e.list,function(e){return e.id!==Ie})}):f.find(Ie).then(function(e){return e.leaveManagees()}).then(function(e){Le.managedContacts=e})}function de(){return c.valuesOf("hrleaveandabsences_leave_request_status").then(function(e){Le.requestStatuses=n.indexBy(e,"name")})}function me(e,t){var a;return n.compact(e.map(function(e){if(a=n.find(t,{type_id:e.id}))return{id:a.type_id,title:e.title+" ( "+a.remainder.current+" ) ",remainder:a.remainder.current,allow_overuse:e.allow_overuse,calculation_unit_name:e.calculation_unit_name}}))}function fe(e){T(),d.publish(e,Le.request),Le.errors=[],Le.dismissModal()}function pe(){["from","to"].forEach(function(e){Le.request[e+"_date"]=Se[e+"_date"]})}function he(e){if(Le.absenceTypes=me(Te.types,e),!Le.absenceTypes.length)return r.reject(xe)}function ve(){Le.period=n.find(Le.absencePeriods,function(e){return Le.isMode("create")?e.current:re(Le.request,e)})}function be(){Le.isMode("create")?(Le.selectedAbsenceType=Le.absenceTypes[0],Le.request.type_id=Le.selectedAbsenceType.id):Le.selectedAbsenceType=n.find(Le.absenceTypes,function(e){return e.id===Le.request.type_id})}function ge(){Se=e.copy(Le.request.attributes())}function ye(){var e;Le.request.id?(e=[Le.requestStatuses[_.statusNames.approved].value,Le.requestStatuses[_.statusNames.adminApproved].value,Le.requestStatuses[_.statusNames.rejected].value,Le.requestStatuses[_.statusNames.cancelled].value],Le.mode="edit",Le.isRole("staff")&&e.indexOf(Le.request.status_id)>-1&&(Le.mode="view")):Le.mode="create"}function _e(){var e=Le.request.status_id;if(!Le.isMode("view")&&!Le.submitting)return Le.submitting=!0,I(),A(),Le.request.isValid().then(ee()&&x).then(L).then(!Le.request.change_balance&&pe).then($e).then(function(){return Le.isMode("edit")?Ae():E()}).catch(function(t){Le.request.status_id=e,t&&W(t)}).finally(function(){Le.submitting=!1})}function $e(){return r.all(Ee.map(function(e){return e.onBeforeSubmit&&e.onBeforeSubmit()}))}function qe(){function e(e){e&&n.push(e),++a===Pe&&(n.length>0?t.reject(n):t.resolve())}var t=r.defer(),n=[],a=0;return Pe>0?o.$broadcast("LeaveRequestPopup::submit",e):t.resolve(),t.promise}function Ce(){Re.forEach(function(e){e()})}function we(){o.$broadcast("LeaveRequestPopup::absenceTypeChanged")}function Ae(){return Le.request.update().then(qe).then(function(){Le.isRole("manager")?fe("LeaveRequest::updatedByManager"):(Le.isRole("staff")||Le.isRole("admin"))&&fe("LeaveRequest::edit")})}t.debug("RequestCtrl");var Te,De={},Pe=0,Se={},Re=[],Ie="",xe="No entitlement",Oe="",Ee=[],Le=n.assign(this,m);Le.absencePeriods=[],Le.absenceTypes=[],Le.canManage=!1,Le.contactName=null,Le.errors=[],Le.loading={absenceTypes:!0,entitlements:!0},Le.managedContacts=[],Le.mode="",Le.newStatusOnSave=null,Le.period={},Le.postContactSelection=!1,Le.requestStatuses={},Le.selectedAbsenceType={},Le.staffMemberSelectionComplete=!1,Le.submitting=!1,Le.balance={closing:0,opening:0,change:{amount:0,breakdown:[]}},Le.canChangeAbsenceType=S,Le.canSubmit=R,Le.closeAlert=O,Le.deleteLeaveRequest=M,Le.dismissModal=k,Le.getStatuses=U,Le.getStatusFromValue=H,Le.initAfterContactSelection=Y,Le.initRequestAttributes=K,Le.isLeaveStatus=te,Le.isLeaveType=ne,Le.isMode=ae,Le.isRole=oe,Le.submit=_e,Le.updateAbsenceType=we,function(){Le.loading.absenceTypes=!0,G(),X(),r.all([ce(),Q(),se(),de()]).then(J).then(ye).then(ve).then(function(){return Le.canManage&&!Le.isMode("edit")&&le()}).then(function(){if(Le.selectedContactId&&(Le.request.contact_id=Le.selectedContactId),Le.request.contact_id)return Le.initAfterContactSelection()}).catch(W).finally(function(){Le.loading.absenceTypes=!1})}()}t.controller("RequestCtrl",r),r.$inject=["$log","$q","$rootScope","$scope","$uibModalInstance","checkPermissions","api.optionGroup","dialog","pubSub","directiveOptions","Contact","Session","AbsencePeriod","AbsenceType","Entitlement","LeaveRequest","LeaveRequestInstance","shared-settings","SicknessRequestInstance","TOILRequestInstance","LeaveRequestService"]}),define("leave-absences/shared/services/leave-popup.service",["common/lodash","common/modules/angular-date","leave-absences/shared/modules/services","common/services/angular-date/date-format","common/services/notification.service","leave-absences/shared/controllers/request.controller"],function(e,t){"use strict";function n(e,t,n,a,r,o,s,i,u){function c(e){return i.get().then(function(t){return e.roleOf(t.contactId)}).then(function(e){return"none"!==e})}function l(e,n,r,s,i){a.open({appendTo:t.children().eq(0),templateUrl:o.sharedPathTpl+"components/leave-request-popup/leave-request-popup.html",controller:"RequestCtrl",controllerAs:"$ctrl",windowClass:"chr_leave-request-modal",resolve:{directiveOptions:function(){return{leaveType:n,leaveRequest:e,selectedContactId:r,isSelfRecord:s,forceRecalculateBalanceChange:i}},format:["DateFormat",function(e){return e.getDateFormat()}]}})}function d(e){return u.find(e).then(function(e){return c(e).then(function(t){t?l(e,e.request_type,e.contact_id,"my-leave"===n.section):r.error("Error","You dont have permission to see this leave request")})}).catch(function(e){r.error("Error",e)})}return e.debug("LeavePopup"),{openModal:l,openModalByID:d}}t.factory("LeavePopup",n),n.$inject=["$log","$rootElement","$rootScope","$uibModal","notificationService","shared-settings","DateFormat","Session","LeaveRequest"]}),define("leave-absences/my-leave/modules/components",["common/angular"],function(e){return e.module("my-leave.components",[])}),define("leave-absences/my-leave/components/my-leave-container.component",["leave-absences/my-leave/modules/components"],function(e){e.component("myLeaveContainer",{bindings:{contactId:"<"},templateUrl:["settings",function(e){return e.pathTpl+"components/my-leave-container.html"}],controllerAs:"myleave",controller:["$log","$rootScope","$state",function(e,t,n){function a(){n.go(r.tabName)}e.debug("Component: my-leave-container"),t.section="my-leave";var r=this;r.tabName=n.current.name, +r.changeTab=a}]})}),function(e){define("leave-absences/my-leave/modules/settings",["common/angular"],function(t){return t.module("my-leave.settings",[]).constant("settings",{debug:e.debug,pathTpl:e.vars.leaveAndAbsences.baseURL+"/views/my-leave/"})})}(CRM),function(e){define("leave-absences/my-leave/modules/config",["common/angular","leave-absences/my-leave/modules/settings"],function(t){return t.module("my-leave.config",["my-leave.settings"]).config(["$stateProvider","$resourceProvider","$urlRouterProvider","$httpProvider","$logProvider","settings",function(t,n,a,r,o,s){o.debugEnabled(s.debug),n.defaults.stripTrailingSlashes=!1,r.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",a.otherwise("/my-leave/report"),t.state("my-leave",{abstract:!0,url:"/my-leave",template:'',resolve:{contactId:function(){return e.vars.leaveAndAbsences.contactId},format:["DateFormat",function(e){return e.getDateFormat()}]}}).state("my-leave.report",{url:"/report?leave-request-id",template:'',onEnter:["$stateParams","LeavePopup",function(e,t){e["leave-request-id"]&&t.openModalByID(e["leave-request-id"])}]}).state("my-leave.calendar",{url:"/calendar",template:''})}])})}(CRM),define("leave-absences/my-leave/app",["common/angular","common/angularBootstrap","common/text-angular","common/directives/loading","common/directives/scroll-shadows.directive","common/directives/time-amount-picker.directive","common/directives/timepicker-select.directive","common/filters/angular-date/format-date","common/filters/time-unit-applier.filter","common/models/option-group","common/modules/dialog","common/services/check-permissions","common/services/crm-ang.service","common/services/angular-date/date-format","leave-absences/shared/ui-router","leave-absences/shared/modules/shared-settings","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/components/leave-calendar.component","leave-absences/shared/components/leave-calendar-day.component","leave-absences/shared/components/leave-calendar-legend.component","leave-absences/shared/components/leave-calendar-month.component","leave-absences/shared/components/leave-request-actions.component","leave-absences/shared/components/leave-request-popup-comments-tab.component","leave-absences/shared/components/leave-request-popup-details-tab.component","leave-absences/shared/components/leave-request-popup-files-tab","leave-absences/shared/components/leave-request-record-actions.component","leave-absences/shared/components/staff-leave-report.component","leave-absences/shared/controllers/sub-controllers/request-modal-details-leave.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-sickness.controller","leave-absences/shared/controllers/sub-controllers/request-modal-details-toil.controller","leave-absences/shared/models/absence-period.model","leave-absences/shared/models/absence-type.model","leave-absences/shared/models/calendar.model","leave-absences/shared/models/entitlement.model","leave-absences/shared/models/leave-request.model","leave-absences/shared/models/public-holiday.model","leave-absences/shared/modules/shared-settings","leave-absences/shared/modules/shared-settings","leave-absences/shared/services/leave-calendar.service","leave-absences/shared/services/leave-popup.service","leave-absences/my-leave/components/my-leave-container.component","leave-absences/my-leave/modules/config"],function(e){return e.module("my-leave",["ngResource","ngAnimate","ui.bootstrap","ui.router","textAngular","common.angularDate","common.dialog","common.directives","common.filters","common.mocks","common.models","common.services","leave-absences.components","leave-absences.controllers","leave-absences.models","leave-absences.services","leave-absences.settings","my-leave.components","my-leave.config"]).run(["$log","$rootScope","shared-settings","settings",function(e,t,n,a){e.debug("app.run"),t.sharedPathTpl=n.sharedPathTpl,t.settings=a}]),e}),function(e,t){var n=e.vars.leaveAndAbsences.baseURL+"/js/angular/src/leave-absences";t.config({urlArgs:"bust="+(new Date).getTime(),paths:{"leave-absences/shared":n+"/shared","leave-absences/my-leave":n+"/my-leave"}}),t(["leave-absences/shared/config"],function(){t(["leave-absences/my-leave/app"],function(e){e.bootstrap(document.querySelector("[data-leave-absences-my-leave]"),["my-leave"])})})}(CRM,require),define("my-leave",function(){}); //# sourceMappingURL=/sites/all/modules/civicrm/tools/extensions/civihr/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/dist/my-leave.js.map \ No newline at end of file diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js index 217175e3def..a1e3d34c3b5 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar-month.component.js @@ -201,6 +201,15 @@ define([ return indexedLeaveRequest; } + /** + * Flushes days data + */ + function flushDays () { + vm.month.days.forEach(function (day) { + day.contactsData = {}; + }); + } + /** * Get profile URL for the given contact id * @@ -462,6 +471,8 @@ define([ : _.pluck(vm.supportData.absenceTypes, 'id') } }; + flushDays(); + return LeaveRequest.all(params, null, null, null, false) .then(function (leaveRequestsData) { leaveRequests = {}; @@ -607,6 +618,11 @@ define([ (forceReload || !dataLoaded) && loadMonthData(); } + /** + * Sorts leave requests by either date or AM/PM + * + * @param {Array} leaveRequests array of leave requests instances + */ function sortLeaveRequests (leaveRequests) { return _.sortBy(leaveRequests, function (leaveRequest) { return +moment(leaveRequest.from_date).format('X') + diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js index fcb400ddf85..b77b874de03 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar-month.component.spec.js @@ -178,6 +178,18 @@ }) ); }); + + describe('when leave requests are reloaded', function () { + beforeEach(function () { + $rootScope.$emit('LeaveCalendar::updateFiltersByAbsenceType', ['1']); + }); + + it('flushes days data before populating it', function () { + expect(_.every(controller.month.days, function (day) { + return !Object.keys(day.contactsData).length; + })).toBe(true); + }); + }); }); describe('contacts', function () { From 6cc9c63a80d7299926f3fa02e61ff86c1702c1d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Fri, 1 Jun 2018 15:47:28 -0400 Subject: [PATCH 217/251] PCHR-3766: Refactor leave calendar service; Add method load contacts by assignation type --- .../shared/services/leave-calendar.service.js | 73 +++++++- .../services/leave-calendar.service.spec.js | 177 +++++++++++------- 2 files changed, 177 insertions(+), 73 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js index c5d48e2e2c5..f701b844fa1 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-calendar.service.js @@ -25,19 +25,72 @@ define([ */ function init (vm) { var contracts; + var contactsLookUpStrategies = { + all: loadAllContacts, + me: loadMyManagees, + unassigned: loadAllUnassignedContacts + }; + + return { + loadContactsByAssignationType: loadContactsByAssignationType, + loadFilteredContacts: loadFilteredContacts + }; /** * Returns a promise of all the contacts that can be used for look up * against the ids to reduce by. * - * @return {Promise} + * @return {Promise} resolves to an array of contacts. */ - function loadAllLookUpContacts () { + function loadAllContacts () { return Contact.all().then(function (contacts) { return contacts.list; }); } + /** + * Returns a promise of all the contacts that are not assigned to another + * contact. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadAllUnassignedContacts () { + return Contact.leaveManagees(undefined, { + unassigned: true + }); + } + + /** + * Returns contacts depending on the selected assignation type (my assignees, + * unnassigned contacts, or all contacts) and stores a list of lookup contact + * ids to based on contacts with active contracts. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadContactsByAssignationType () { + var filterByAssignee = vm.filters.userSettings.assignedTo.type; + var loadLookUpContacts = contactsLookUpStrategies[filterByAssignee]; + + return loadLookUpContacts() + .then(function (contacts) { + vm.lookupContacts = contacts; + + return $q.all([ + loadFilteredContacts(), + filterByAssignee !== 'me' + ? loadContactIdsToReduceTo() + : $q.resolve(null) + ]); + }) + .then(function (results) { + var contacts = results[0]; + + vm.contactIdsToReduceTo = results[1]; + + return contacts; + }); + } + /** * Returns a promise of a list of contact ids for contacts with contracts * that are valid for the selected period's start and end dates. @@ -85,6 +138,16 @@ define([ }); } + /** + * Returns a promise of all the contacts that are managed by the logged in + * user. + * + * @return {Promise} resolves to an array of contacts. + */ + function loadMyManagees () { + return Contact.leaveManagees(vm.contactId); + } + /** * Returns a map of filters to pass to the Contact API. * @@ -108,12 +171,6 @@ define([ return filters; } - - return { - loadAllLookUpContacts: loadAllLookUpContacts, - loadContactIdsToReduceTo: loadContactIdsToReduceTo, - loadFilteredContacts: loadFilteredContacts - }; } return { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js index 7caa37267ab..18950575bc6 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-calendar.service.spec.js @@ -12,7 +12,8 @@ define([ 'use strict'; describe('LeaveCalendarService', function () { - var $rootScope, Contact, contractApi, customContractValues, leaveCalendar, mockedContracts, vm; + var $rootScope, Contact, contractApi, customContractValues, leaveCalendar, + loadedContacts, mockedContracts, vm; beforeEach(module('common.mocks', 'common.models', 'common.services', 'leave-absences.services', function ($provide) { @@ -31,104 +32,135 @@ define([ ); beforeEach(inject(function ($q, _$rootScope_, _Contact_, LeaveCalendarService) { + var contacts = contactsMockData.all.values; $rootScope = _$rootScope_; - vm = {}; Contact = _Contact_; - leaveCalendar = LeaveCalendarService.init(vm); + vm = { + contactId: _.uniqueId(), + lookupContacts: [], + selectedPeriod: { start_date: '2000-01-01', end_date: '2000-03-31' }, + filters: { + userSettings: { + assignedTo: { type: 'all' }, + department: { value: _.uniqueId() }, + level_type: { value: _.uniqueId() }, + location: { value: _.uniqueId() }, + region: { value: _.uniqueId() } + } + } + }; - spyOn(Contact, 'all').and.returnValue($q.resolve({ list: contactsMockData.all.values })); + spyOn(Contact, 'all').and.returnValue($q.resolve({ list: contacts })); + spyOn(Contact, 'leaveManagees').and.returnValue($q.resolve(contacts.slice(0, 2))); contractApi.all.and.returnValue($q.resolve(mockedContracts)); + + leaveCalendar = LeaveCalendarService.init(vm); })); - it('defines a leave calendar service', function () { + it('returns a leave calendar service instance', function () { expect(leaveCalendar).toBeDefined(); }); - describe('loadAllLookUpContacts()', function () { - var allLookUpContacts; + describe('loadContactsByAssignationType()', function () { + describe('when loading all contacts', function () { + beforeEach(function (done) { + vm.filters.userSettings.assignedTo.type = 'all'; + loadContactsByAssignationType(done); + }); - beforeEach(function (done) { - leaveCalendar.loadAllLookUpContacts() - .then(function (_allLookupContacts_) { - allLookUpContacts = _allLookupContacts_; - }) - .finally(done); - $rootScope.$digest(); - }); + it('requests all contacts', function () { + expect(Contact.all).toHaveBeenCalledWith(); + }); - it('requests all contacts', function () { - expect(Contact.all).toHaveBeenCalledWith(); - }); + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(contactsMockData.all.values); + }); - it('returns a list of look up contacts', function () { - expect(allLookUpContacts).toEqual(contactsMockData.all.values); + it('stores all look up contact', function () { + expect(vm.lookupContacts).toEqual(contactsMockData.all.values); + }); }); - }); - - describe('loadContactIdsToReduceTo()', function () { - var contactIdsToReduceTo, expectedContactIdsToReduceTo; - describe('when all the contracts are covered by the period filters', function () { + describe('when loading my assigned contacts', function () { beforeEach(function (done) { - expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id'); - vm.selectedPeriod = { - start_date: customContractValues[0].period_start_date, - end_date: customContractValues[2].period_end_date - }; + vm.filters.userSettings.assignedTo.type = 'me'; + loadContactsByAssignationType(done); + }); + + it('requests my assigned contacts', function () { + expect(Contact.leaveManagees).toHaveBeenCalledWith(vm.contactId); + }); - loadContactIdsToReduceTo(done); + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(contactsMockData.all.values); }); - it('returns all the contact ids with contracts within the selected period', function () { - expect(contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + it('stores my assignees as look up contacts', function () { + expect(vm.lookupContacts).toEqual(contactsMockData.all.values.slice(0, 2)); }); }); - describe('when only some of the contracts are covered by the period filters', function () { + describe('when loading unassigned contacts', function () { beforeEach(function (done) { - expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id').slice(1, 3); - vm.selectedPeriod = { - start_date: customContractValues[1].period_start_date, - end_date: customContractValues[2].period_end_date - }; + vm.filters.userSettings.assignedTo.type = 'unassigned'; + loadContactsByAssignationType(done); + }); - loadContactIdsToReduceTo(done); + it('requests unnassigned contacts', function () { + expect(Contact.leaveManagees) + .toHaveBeenCalledWith(undefined, { unassigned: true }); }); - it('returns all the contact ids with contracts within the selected period', function () { - expect(contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + it('returns a list of contacts', function () { + expect(loadedContacts).toEqual(contactsMockData.all.values); + }); + + it('stores the unnassigned contacts as look up contacts', function () { + expect(vm.lookupContacts).toEqual(contactsMockData.all.values.slice(0, 2)); }); }); - /** - * Executes the load contact ids to reduce to function and stores the result. - * - * @param {Function} done the jasmine done function to execute once the contact - * ids have been loaded. - */ - function loadContactIdsToReduceTo (done) { - leaveCalendar.loadContactIdsToReduceTo() - .then(function (_contactIdsToReduceTo_) { - contactIdsToReduceTo = _contactIdsToReduceTo_; - }) - .finally(done); - $rootScope.$digest(); - } + describe('populating the contact ids to reduce to', function () { + var expectedContactIdsToReduceTo; + + describe('when all the contracts are covered by the period filters', function () { + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id'); + vm.selectedPeriod = { + start_date: customContractValues[0].period_start_date, + end_date: customContractValues[2].period_end_date + }; + + loadContactsByAssignationType(done); + }); + + it('returns all the contact ids with contracts within the selected period', function () { + expect(vm.contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + }); + + describe('when only some of the contracts are covered by the period filters', function () { + beforeEach(function (done) { + expectedContactIdsToReduceTo = _.pluck(customContractValues, 'contact_id').slice(1, 3); + vm.selectedPeriod = { + start_date: customContractValues[1].period_start_date, + end_date: customContractValues[2].period_end_date + }; + + loadContactsByAssignationType(done); + }); + + it('returns all the contact ids with contracts within the selected period', function () { + expect(vm.contactIdsToReduceTo).toEqual(expectedContactIdsToReduceTo); + }); + }); + }); }); describe('loadFilteredContacts()', function () { var expectedFilters; beforeEach(function () { - vm.lookupContacts = []; - vm.filters = { - userSettings: { - department: { value: _.uniqueId() }, - level_type: { value: _.uniqueId() }, - location: { value: _.uniqueId() }, - region: { value: _.uniqueId() } - } - }; expectedFilters = { department: vm.filters.userSettings.department.value, level_type: vm.filters.userSettings.level_type.value, @@ -230,5 +262,20 @@ define([ return mockedContracts.values; } + + /** + * Executes the load contacts by assignation type function and stores the result. + * + * @param {Function} done the jasmine done function to execute once the contact + * ids have been loaded. + */ + function loadContactsByAssignationType (done) { + leaveCalendar.loadContactsByAssignationType() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + } }); }); From 81d5413ce23b5b1249ba8d44e55b503fd455991f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Fri, 1 Jun 2018 16:17:55 -0400 Subject: [PATCH 218/251] PCHR-3766: Implement new leave calendar service method on admin controller --- .../leave-calendar-admin.controller.js | 47 +------------------ .../leave-calendar-admin.controller.spec.js | 25 +++++----- 2 files changed, 14 insertions(+), 58 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js index a577301a5fc..34a66cd659d 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-admin.controller.js @@ -28,12 +28,7 @@ define([ vm.showContactDetailsLink = true; vm.showContactName = true; vm.showFilters = true; - vm.filtersByAssignee = [ - { type: 'me', label: 'People I approve' }, - { type: 'unassigned', label: 'People without approver' }, - { type: 'all', label: 'All' } - ]; - vm.filters.userSettings.assignedTo = vm.filtersByAssignee[0]; + vm.filters.userSettings.assignedTo = _.find(vm.filtersByAssignee, { type: 'me' }); vm.showAdminFilteringHint = showAdminFilteringHint; @@ -54,49 +49,11 @@ define([ * @return {Promise} resolves as an {Array} */ loadContacts: function () { - var filterByAssignee = vm.filters.userSettings.assignedTo.type; - - return lookupContacts(filterByAssignee) - .then(function (contacts) { - vm.lookupContacts = contacts; - - return $q.all([ - leaveCalendar.loadFilteredContacts(), - filterByAssignee !== 'me' - ? leaveCalendar.loadContactIdsToReduceTo() - : $q.resolve(null) - ]); - }) - .then(function (results) { - var contacts = results[0]; - - vm.contactIdsToReduceTo = results[1]; - - return contacts; - }); + return leaveCalendar.loadContactsByAssignationType(); } }; } - /** - * Returns the loading contacts promise depending on the - * filter by assignee chosen - * - * @param {String} filterByAssignee (me|unassigned|all) - * @return {Promise} resolved to a list of loaded contacts - */ - function lookupContacts (filterByAssignee) { - if (filterByAssignee === 'me') { - return Contact.leaveManagees(vm.contactId); - } else if (filterByAssignee === 'unassigned') { - return Contact.leaveManagees(undefined, { - unassigned: true - }); - } else { - return leaveCalendar.loadAllLookUpContacts(); - } - } - /** * Shows a hint to the filtering logic */ diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js index 0cd68e10eb6..59bbac6b83c 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-admin.controller.spec.js @@ -41,13 +41,15 @@ expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); }); + it('selects the assignee filter "People I approve" by default', function () { + expect(vm.filters.userSettings.assignedTo.type).toBe('me'); + }); + describe('loadContacts()', function () { var contacts; describe('when loading all of the contacts', function () { beforeEach(function (done) { - vm.filters.userSettings.assignedTo.type = 'all'; - controller.loadContacts() .then(function (_contacts_) { contacts = _contacts_; @@ -56,16 +58,8 @@ $rootScope.$digest(); }); - it('requests the contact ids for contacts with valid contracts within the selected period', function () { - expect(leaveCalendarServiceMock.instance.loadContactIdsToReduceTo).toHaveBeenCalledWith(); - }); - - it('stores the contact ids to reduce to', function () { - expect(vm.contactIdsToReduceTo).toEqual(leaveCalendarServiceMock.data.contactIdsToReduceTo); - }); - - it('requests contacts based on the selected indexes', function () { - expect(leaveCalendarServiceMock.instance.loadFilteredContacts).toHaveBeenCalledWith(); + it('requests contacts by assignation type', function () { + expect(leaveCalendarServiceMock.instance.loadContactsByAssignationType).toHaveBeenCalledWith(); }); it('returns the list of filtered contacts', function () { @@ -78,7 +72,12 @@ vm = { contactId: contactId, filters: { userSettings: {} }, - selectedPeriod: { start_date: '2016-01-01', end_date: '2016-12-31' } + selectedPeriod: { start_date: '2016-01-01', end_date: '2016-12-31' }, + filtersByAssignee: [ + { type: 'me', label: 'People I approve' }, + { type: 'unassigned', label: 'People without approver' }, + { type: 'all', label: 'All' } + ] }; controller = $controller('LeaveCalendarAdminController').init(vm); } From b24b84ddc75bc8c467dd191c62d0894683620e1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Fri, 1 Jun 2018 17:58:41 -0400 Subject: [PATCH 219/251] PCHR-3766: Add "filter by assignation type" to My Leave --- .../components/leave-calendar.component.js | 37 ++++--- .../leave-calendar-staff.controller.js | 6 +- .../services/leave-calendar.service.mock.js | 46 ++++++-- .../leave-calendar.component.spec.js | 102 ++++++------------ .../leave-calendar-staff.controller.spec.js | 101 +++++++++-------- .../shared/components/leave-calendar.html | 4 +- 6 files changed, 159 insertions(+), 137 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js index 8cdfd9db196..c970b0d957e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-calendar.component.js @@ -27,7 +27,7 @@ define([ function controller ($controller, $q, $log, $rootScope, sharedSettings, AbsencePeriod, AbsenceType, PublicHoliday, OptionGroup, checkPermissions) { $log.debug('Component: leave-calendar'); - var subController, userRole; + var actualUserRole, subController, userRole; var vm = this; vm.absencePeriods = []; @@ -55,11 +55,18 @@ define([ }, absenceTypes: {} }; + vm.filtersByAssignee = [ + { type: 'me', label: 'People I approve' }, + { type: 'unassigned', label: 'People without approver' }, + { type: 'all', label: 'All' } + ]; + vm.filters.userSettings.assignedTo = vm.filtersByAssignee[2]; vm.monthPaginatorsAvailability = { previous: true, next: true }; + vm.canManageRequests = canManageRequests; vm.labelPeriod = labelPeriod; vm.navigateToCurrentMonth = navigateToCurrentMonth; vm.paginateMonth = paginateMonth; @@ -118,6 +125,15 @@ define([ vm.months = months; } + /** + * Returns true if the user is an admin or manager. + * + * @return {Boolean} + */ + function canManageRequests () { + return _.includes(['admin', 'manager'], actualUserRole); + } + /** * Returns a month index in the format "YYYY-MM" * @@ -433,18 +449,13 @@ define([ * @return {Promise} */ function setUserRole () { - if (vm.roleOverride) { - return $q.resolve().then(function () { - userRole = vm.roleOverride; - }); - } else { - return $q.all([ - checkPermissions(sharedSettings.permissions.admin.administer), - checkPermissions(sharedSettings.permissions.ssp.manage) - ]).then(function (results) { - userRole = results[0] ? 'admin' : (results[1] ? 'manager' : 'staff'); - }); - } + return $q.all([ + checkPermissions(sharedSettings.permissions.admin.administer), + checkPermissions(sharedSettings.permissions.ssp.manage) + ]).then(function (results) { + actualUserRole = results[0] ? 'admin' : (results[1] ? 'manager' : 'staff'); + userRole = vm.roleOverride ? vm.roleOverride : actualUserRole; + }); } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js index 9b8f7360234..8de231a102f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js @@ -51,7 +51,11 @@ define([ vm.lookupContacts = [{ id: vm.contactId }]; } - return leaveCalendar.loadFilteredContacts(); + if (!vm.displaySingleContact && vm.canManageRequests()) { + return leaveCalendar.loadContactsByAssignationType(); + } else { + return leaveCalendar.loadFilteredContacts(); + } } }; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js index c256b6e75fa..6611c42a565 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/mocks/services/leave-calendar.service.mock.js @@ -4,22 +4,52 @@ define([ 'common/lodash', 'common/mocks/data/contact.data' ], function (_, contactsMockData) { + var $q, vm; var LeaveCalendarService = jasmine.createSpyObj('LeaveCalendarService', ['init']); var leaveCalendarInstance = jasmine.createSpyObj('leaveCalendarInstance', [ - 'loadAllLookUpContacts', 'loadContactIdsToReduceTo', - 'loadFilteredContacts']); + 'loadContactsByAssignationType', 'loadFilteredContacts']); var data = { contactIdsToReduceTo: [_.uniqueId(), _.uniqueId(), _.uniqueId()], filteredContacts: _.clone(contactsMockData.all.values.slice(0, 2)), lookedUpContacts: _.clone(contactsMockData.all.values) }; - function setup ($q) { - LeaveCalendarService.init.and.returnValue(leaveCalendarInstance); - leaveCalendarInstance.loadAllLookUpContacts.and.returnValue($q.resolve( - data.lookedUpContacts)); - leaveCalendarInstance.loadContactIdsToReduceTo.and.returnValue($q.resolve( - data.contactIdsToReduceTo)); + /** + * Simulates the init function of the leave calendar service. It stores the view + * model reference and returns a leave calendar instance. + * + * @param {Object} vm the view model containing the filters information, selected period, etc. + * @return {Object} a mock leave calendar instance. + */ + function LeaveCalendarServiceInit (_vm_) { + vm = _vm_; + + return leaveCalendarInstance; + } + + /** + * Simulates a call to the leave calendar instance's loadContactsByAssignationType method. + * It assigns the contact ids to reduce to and the look up contacts to the previously provided + * view model. Finally, it returns a list of filtered contacts. + * + * @return {Array} a list of contacts. + */ + function loadContactsByAssignationType () { + vm.contactIdsToReduceTo = data.contactIdsToReduceTo; + vm.lookupContacts = data.lookedUpContacts; + + return $q.resolve(data.filteredContacts); + } + + /** + * Initializes the leave calendar service mock for testing purposes. + * + * @param $q the angular $q service. + */ + function setup (_$q_) { + $q = _$q_; + LeaveCalendarService.init.and.callFake(LeaveCalendarServiceInit); + leaveCalendarInstance.loadContactsByAssignationType.and.callFake(loadContactsByAssignationType); leaveCalendarInstance.loadFilteredContacts.and.returnValue($q.resolve( data.filteredContacts)); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js index c56652ba1ca..6e8fbfaf792 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-calendar.component.spec.js @@ -108,6 +108,18 @@ expect($log.debug).toHaveBeenCalled(); }); + it('has an array of filters by assignee', function () { + expect(controller.filtersByAssignee).toEqual([ + { type: 'me', label: 'People I approve' }, + { type: 'unassigned', label: 'People without approver' }, + { type: 'all', label: 'All' } + ]); + }); + + it('selects the assignee filter "All" by default', function () { + expect(controller.filters.userSettings.assignedTo.type).toBe('all'); + }); + describe('on init', function () { it('hides the loader for the whole page', function () { expect(controller.loading.page).toBe(false); @@ -346,75 +358,6 @@ }); }); - describe('filter by assignee', function () { - it('does *not* have such a filter for staff', function () { - expect(controller.filtersByAssignee).not.toBeDefined(); - }); - - describe('when user is Admin', function () { - beforeEach(function () { - currentContact.role = 'admin'; - - compileComponent(); - }); - - it('has the filter available', function () { - expect(controller.filtersByAssignee).toBeDefined(); - }); - - describe('when filter by assignee is set to "Me"', function () { - beforeEach(function () { - Contract.all.calls.reset(); - Contact.all.calls.reset(); - selectFilterByAssignee('me'); - }); - - it('does *not* load contracts', function () { - expect(Contract.all).not.toHaveBeenCalledWith(); - }); - - it('loads only managees', function () { - expect(Contact.all).not.toHaveBeenCalledWith(); - expect(Contact.leaveManagees).toHaveBeenCalledWith(currentContact.id); - }); - }); - - describe('when filter by assignee is set to "Unassigned"', function () { - beforeEach(function () { - selectFilterByAssignee('unassigned'); - }); - - it('loads all contracts', function () { - expect(Contract.all).toHaveBeenCalledWith(); - }); - - it('loads all contacts', function () { - expect(Contact.leaveManagees).toHaveBeenCalledWith(undefined, { - unassigned: true - }); - }); - }); - - describe('when filter by assignee is set to "All"', function () { - beforeEach(function () { - selectFilterByAssignee('all'); - }); - - it('loads all contracts', function () { - expect(Contract.all).toHaveBeenCalledWith(); - }); - - it('loads all contacts', function () { - expect(Contact.all).toHaveBeenCalledWith(); - }); - }); - }); - - afterEach(function () { - currentContact.role = 'staff'; - }); - }); - describe('hint for admin filtering logic', function () { it('does *not* have such a hint for staff', function () { expect(controller.showAdminFilteringHint).not.toBeDefined(); @@ -598,6 +541,27 @@ } }); + describe('canManageRequests()', function () { + var scenarios = [ + { role: 'admin', expectedResult: true }, + { role: 'manager', expectedResult: true }, + { role: 'staff', expectedResult: false } + ]; + + scenarios.forEach(function (scenario) { + describe('when the ' + scenario.role + ' checks if they can manage requests', function () { + beforeEach(function () { + currentContact.role = scenario.role; + compileComponent(); + }); + + it('returns ' + scenario.expectedResult, function () { + expect(controller.canManageRequests()).toBe(scenario.expectedResult); + }); + }); + }); + }); + describe('navigateToCurrentMonth()', function () { var currentAbsencePeriod; diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js index c1d3e5a21c6..25962339df3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js @@ -3,42 +3,33 @@ (function (CRM) { define([ 'common/lodash', - 'common/mocks/data/contact.data', + 'leave-absences/mocks/services/leave-calendar.service.mock', 'leave-absences/my-leave/app' - ], function (_, contactsMock) { + ], function (_, leaveCalendarServiceMock) { 'use strict'; describe('LeaveCalendarStaffController', function () { - var $controller, $log, $rootScope, Contact, contactIdsToReduceTo, controller, - filteredContacts, leaveCalendar, LeaveCalendarService, lookedUpContacts, + var $controller, $log, $provide, $rootScope, canManageRequests, controller, vm; var contactId = CRM.vars.leaveAndAbsences.contactId; - beforeEach(module('my-leave')); - beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_, _Contact_, - _LeaveCalendarService_) { + beforeEach(module('my-leave', function (_$provide_) { + $provide = _$provide_; + })); + + beforeEach(inject(['api.contact.mock', function (ContactAPIMock) { + $provide.value('api.contact', ContactAPIMock); + $provide.value('LeaveCalendarService', leaveCalendarServiceMock.service); + }])); + + beforeEach(inject(function (_$controller_, _$log_, $q, _$rootScope_) { $controller = _$controller_; $log = _$log_; $rootScope = _$rootScope_; - Contact = _Contact_; - contactIdsToReduceTo = [_.uniqueId(), _.uniqueId(), _.uniqueId()]; - filteredContacts = _.clone(contactsMock.all.values.slice(0, 2)); - LeaveCalendarService = _LeaveCalendarService_; - leaveCalendar = jasmine.createSpyObj('leaveCalendar', [ - 'loadAllLookUpContacts', 'loadContactIdsToReduceTo', - 'loadFilteredContacts']); - lookedUpContacts = _.clone(contactsMock.all.values); + canManageRequests = jasmine.createSpy('canManageRequests'); spyOn($log, 'debug'); - spyOn(Contact, 'all').and.callThrough(); - spyOn(LeaveCalendarService, 'init').and.returnValue(leaveCalendar); - leaveCalendar.loadAllLookUpContacts.and.returnValue($q.resolve( - lookedUpContacts)); - leaveCalendar.loadContactIdsToReduceTo.and.returnValue($q.resolve( - contactIdsToReduceTo)); - leaveCalendar.loadFilteredContacts.and.returnValue($q.resolve( - filteredContacts)); - + leaveCalendarServiceMock.setup($q); initController(); })); @@ -47,7 +38,7 @@ }); it('initializes the leave calendar service', function () { - expect(LeaveCalendarService.init).toHaveBeenCalledWith(vm); + expect(leaveCalendarServiceMock.service.init).toHaveBeenCalledWith(vm); }); it('displays the contact names', function () { @@ -63,26 +54,46 @@ }); describe('loadContacts()', function () { - var result, expectedContactIdsToReduceTo; - - beforeEach(function (done) { - expectedContactIdsToReduceTo = _.clone(contactIdsToReduceTo); - - expectedContactIdsToReduceTo.push(vm.contactId); - controller.loadContacts() - .then(function (_result_) { - result = _result_; - }) - .finally(done); - $rootScope.$digest(); - }); + var loadedContacts; + + describe('as a staff', function () { + beforeEach(function (done) { + canManageRequests.and.returnValue(false); + controller.loadContacts() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('loads the filtered contacts', function () { + expect(leaveCalendarServiceMock.instance.loadFilteredContacts).toHaveBeenCalledWith(); + }); - it('loads the filtered contacts', function () { - expect(leaveCalendar.loadFilteredContacts).toHaveBeenCalled(); + it('returns the filtered contacts', function () { + expect(loadedContacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); + }); }); - it('returns the filtered contacts', function () { - expect(result).toEqual(filteredContacts); + describe('as a manager or admin', function () { + beforeEach(function (done) { + canManageRequests.and.returnValue(true); + controller.loadContacts() + .then(function (_loadedContacts_) { + loadedContacts = _loadedContacts_; + }) + .finally(done); + $rootScope.$digest(); + }); + + it('loads the filtered contacts', function () { + expect(leaveCalendarServiceMock.instance.loadContactsByAssignationType).toHaveBeenCalledWith(); + }); + + it('returns the filtered contacts', function () { + expect(loadedContacts).toEqual(leaveCalendarServiceMock.data.filteredContacts); + }); }); describe('when the component should only display a single contact', function () { @@ -96,15 +107,17 @@ it('only loads the information for the given contact', function () { expect(vm.lookupContacts).toEqual([{ id: vm.contactId }]); - expect(leaveCalendar.loadFilteredContacts).toHaveBeenCalled(); + expect(leaveCalendarServiceMock.instance.loadFilteredContacts).toHaveBeenCalledWith(); }); }); }); function initController () { vm = { + displaySingleContact: false, contactId: contactId, - filters: { userSettings: {} } + filters: { userSettings: {} }, + canManageRequests: canManageRequests }; controller = $controller('LeaveCalendarStaffController').init(vm); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html index 1e39fb753de..841512b9f94 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html @@ -99,7 +99,7 @@
    + ng-class="{ 'col-lg-offset-6': !calendar.canManageRequests() }">
    Date: Fri, 1 Jun 2018 18:19:04 -0400 Subject: [PATCH 220/251] PCHR-3766: Remove Admin Portal Contacts leave filters --- .../leave-calendar-staff.controller.js | 9 ++++--- .../leave-calendar-staff.controller.spec.js | 27 ++++++++++++++----- .../shared/components/leave-calendar.html | 4 +-- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js index 8de231a102f..40aa8bcd60e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/sub-controllers/leave-calendar-staff.controller.js @@ -26,6 +26,11 @@ define([ vm.showContactName = true; vm.showFilters = true; + if (vm.displaySingleContact) { + vm.showFilters = false; + vm.lookupContacts = [{ id: vm.contactId }]; + } + return api(); } }; @@ -47,10 +52,6 @@ define([ * @return {Promise} resolves as an {Array} */ loadContacts: function () { - if (vm.displaySingleContact) { - vm.lookupContacts = [{ id: vm.contactId }]; - } - if (!vm.displaySingleContact && vm.canManageRequests()) { return leaveCalendar.loadContactsByAssignationType(); } else { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js index 25962339df3..1cdf6175709 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/sub-controllers/leave-calendar-staff.controller.spec.js @@ -27,6 +27,12 @@ $log = _$log_; $rootScope = _$rootScope_; canManageRequests = jasmine.createSpy('canManageRequests'); + vm = { + displaySingleContact: false, + contactId: contactId, + filters: { userSettings: {} }, + canManageRequests: canManageRequests + }; spyOn($log, 'debug'); leaveCalendarServiceMock.setup($q); @@ -101,6 +107,7 @@ vm.displaySingleContact = true; vm.contactId = _.uniqueId(); vm.lookupContacts = []; + initController(); controller.loadContacts(); }); @@ -112,13 +119,21 @@ }); }); + describe('when the component only displays a single contact', function () { + beforeEach(function () { + vm.displaySingleContact = true; + initController(); + }); + + it('does not show the filters', function () { + expect(vm.showFilters).toEqual(false); + }); + }); + + /** + * Initializes the leave calendar staff sub controller. + */ function initController () { - vm = { - displaySingleContact: false, - contactId: contactId, - filters: { userSettings: {} }, - canManageRequests: canManageRequests - }; controller = $controller('LeaveCalendarStaffController').init(vm); } }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html index 841512b9f94..ea453fa4f9e 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/shared/components/leave-calendar.html @@ -99,7 +99,7 @@
    + ng-class="{ 'col-lg-offset-6': !calendar.canManageRequests() || !calendar.showFilters }">
    Date: Sat, 2 Jun 2018 17:05:01 -0400 Subject: [PATCH 221/251] PCHR-3766: Initialize inside the request controller the is self record property --- .../shared/controllers/request.controller.js | 30 ++++-- .../controllers/request.controller.spec.js | 99 ++++++++++++++++++- 2 files changed, 120 insertions(+), 9 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js index 852a7e022ad..67ef005f0f3 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/controllers/request.controller.js @@ -95,12 +95,15 @@ define([ initAvailableStatusesMatrix(); initListeners(); - return $q.all([ - loadLoggedInContactId(), - initRoles(), - loadAbsencePeriods(), - loadStatuses() - ]) + return loadLoggedInContactId() + .then(initIsSelfRecord) + .then(function () { + return $q.all([ + initRoles(), + loadAbsencePeriods(), + loadStatuses() + ]); + }) .then(initRequest) .then(setModalMode) .then(setInitialAbsencePeriod) @@ -509,6 +512,19 @@ define([ return $q.resolve(); } + /** + * Initializes the is self record property and sets it to true when + * on My Leave section and the user is editing their own request or creating + * a new one for themselves. + */ + function initIsSelfRecord () { + var isSectionMyLeave = $rootScope.section === 'my-leave'; + var isMyOwnRequest = +loggedInContactId === +_.get(vm, 'leaveRequest.contact_id'); + var isNewRequest = !_.get(vm, 'leaveRequest.id'); + + vm.isSelfRecord = isSectionMyLeave && (isMyOwnRequest || isNewRequest); + } + /** * Initialises listeners */ @@ -585,7 +601,7 @@ define([ // If the user is creating or editing their own leave, they will be // treated as a staff regardless of their actual role. - if ($rootScope.section === 'my-leave') { + if (vm.isSelfRecord) { return; } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js index 671dff7d386..88ea7dc2806 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/controllers/request.controller.spec.js @@ -575,8 +575,8 @@ var leaveRequest = LeaveRequestInstance.init(mockData.findBy('status_id', status)); leaveRequest.contact_id = CRM.vars.leaveAndAbsences.contactId.toString(); - - initTestController({ leaveRequest: leaveRequest, isSelfRecord: true }); + $rootScope.section = 'my-leave'; + initTestController({ leaveRequest: leaveRequest }); expectedStatusValue = optionGroupMock.specificValue('hrleaveandabsences_leave_request_status', 'value', '3'); controller.balance.closing = 5; @@ -1323,6 +1323,101 @@ } }); + describe('checking if it is a self record', function () { + var leaveRequest; + var loggedInContactId = CRM.vars.leaveAndAbsences.contactId.toString(); + var anotherContactId = _.uniqueId(); + + beforeEach(function () { + role = 'admin'; + leaveRequest = LeaveRequestInstance.init({}); + }); + + describe('when the section is My Leave', function () { + beforeEach(function () { + $rootScope.section = 'my-leave'; + }); + + describe('and I am checking someone else\'s request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = anotherContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + + describe('and I am checking my own request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = loggedInContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as true', function () { + expect(controller.isSelfRecord).toBe(true); + }); + }); + + describe('and I create a new request for myself', function () { + beforeEach(function () { + initTestController({ mode: 'create', leaveRequest: leaveRequest }); + }); + + it('sets is self record as true', function () { + expect(controller.isSelfRecord).toBe(true); + }); + }); + }); + + describe('when the section is Manager Leave', function () { + beforeEach(function () { + $rootScope.section = 'manager-leave'; + }); + + describe('and I am checking someone else\'s request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = anotherContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + + describe('and I am checking my own request', function () { + beforeEach(function () { + leaveRequest.id = _.uniqueId(); + leaveRequest.contact_id = loggedInContactId; + + initTestController({ leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + + describe('and I create a new request for myself', function () { + beforeEach(function () { + initTestController({ mode: 'create', leaveRequest: leaveRequest }); + }); + + it('sets is self record as false', function () { + expect(controller.isSelfRecord).toBe(false); + }); + }); + }); + }); + /** * Initialize the controller * From d52dc34cef2ec616e1fdebc72d9a398f9d47088e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Olivo?= Date: Sat, 2 Jun 2018 23:37:04 -0400 Subject: [PATCH 222/251] PCHR-3766: Remove unnused references to "is self record" property --- .../shared/components/leave-request-actions.component.js | 5 ++--- .../components/leave-request-record-actions.component.js | 6 ++---- .../shared/components/manage-leave-requests.component.js | 7 +++---- .../leave-absences/shared/services/leave-popup.service.js | 6 ++---- .../components/leave-request-actions.component.spec.js | 5 ++--- .../leave-request-record-actions.component.spec.js | 5 ++--- .../components/manage-leave-requests.component.spec.js | 5 ++--- .../test/shared/services/leave-popup.service.spec.js | 2 +- .../views/my-leave/components/my-leave-container.html | 3 +-- .../views/shared/components/leave-request-actions.html | 2 +- .../shared/components/leave-request-record-actions.html | 2 +- 11 files changed, 19 insertions(+), 29 deletions(-) diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js index 609dec4a0ff..42eada5272f 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-actions.component.js @@ -268,11 +268,10 @@ define([ * @param {Object} leaveRequest * @param {String} leaveType * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (event, leaveRequest, leaveType, selectedContactId, isSelfRecord) { + function openLeavePopup (event, leaveRequest, leaveType, selectedContactId) { event.stopPropagation(); - LeavePopup.openModal(leaveRequest, leaveType, selectedContactId, isSelfRecord); + LeavePopup.openModal(leaveRequest, leaveType, selectedContactId); } /** diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js index 8f7cf0ec81e..cb7fd715143 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/leave-request-record-actions.component.js @@ -8,7 +8,6 @@ define([ components.component('leaveRequestRecordActions', { bindings: { contactId: '<', - isSelfRecord: '<', selectedContactId: '<' }, templateUrl: ['shared-settings', function (sharedSettings) { @@ -39,7 +38,7 @@ define([ queryParams = beforeHashQueryParams.parse(); if (queryParams.openModal) { - openLeavePopup(null, queryParams.openModal, vm.selectedContactId, vm.isSelfRecord); + openLeavePopup(null, queryParams.openModal, vm.selectedContactId); } }()); @@ -49,9 +48,8 @@ define([ * @param {Object} leaveRequest * @param {String} leaveType * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (leaveRequest, leaveType, selectedContactId, isSelfRecord) { + function openLeavePopup (leaveRequest, leaveType, selectedContactId) { LeavePopup.openModal.apply(LeavePopup, arguments); } } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js index ad438c9f138..d57c23464d7 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/components/manage-leave-requests.component.js @@ -22,8 +22,8 @@ define([ ]; function ManageLeaveRequestsController ($log, $q, $rootScope, Contact, - checkPermissions, OptionGroup, sharedSettings, AbsencePeriod, AbsenceType, - LeaveRequest, LeavePopup, pubSub) { + checkPermissions, OptionGroup, sharedSettings, AbsencePeriod, AbsenceType, + LeaveRequest, LeavePopup, pubSub) { 'use strict'; $log.debug('Component: manage-leave-requests'); @@ -403,9 +403,8 @@ define([ * @param {Object} leaveRequest * @param {String} leaveType * @param {String} selectedContactId - * @param {Boolean} isSelfRecord */ - function openLeavePopup (leaveRequest, leaveType, selectedContactId, isSelfRecord) { + function openLeavePopup (leaveRequest, leaveType, selectedContactId) { LeavePopup.openModal.apply(LeavePopup, arguments); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js index 02088efcfb3..9bf45fe7648 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/src/leave-absences/shared/services/leave-popup.service.js @@ -47,10 +47,9 @@ define([ * @param {String} leaveType * @param {String} selectedContactId - Contact ID for the contact dropdown * when the manager/admin is opening the request - * @param {Boolean} isSelfRecord - True If the owner is opening the leave request * @param {Boolean} forceRecalculateBalanceChange optional */ - function openModal (leaveRequest, leaveType, selectedContactId, isSelfRecord, forceRecalculateBalanceChange) { + function openModal (leaveRequest, leaveType, selectedContactId, forceRecalculateBalanceChange) { $modal.open({ appendTo: $rootElement.children().eq(0), templateUrl: sharedSettings.sharedPathTpl + 'components/leave-request-popup/leave-request-popup.html', @@ -63,7 +62,6 @@ define([ leaveType: leaveType, leaveRequest: leaveRequest, selectedContactId: selectedContactId, - isSelfRecord: isSelfRecord, forceRecalculateBalanceChange: forceRecalculateBalanceChange }; }, @@ -88,7 +86,7 @@ define([ return checkPermissionBeforeOpeningPopup(leaveRequest) .then(function (hasPermission) { if (hasPermission) { - openModal(leaveRequest, leaveRequest.request_type, leaveRequest.contact_id, $rootScope.section === 'my-leave'); + openModal(leaveRequest, leaveRequest.request_type, leaveRequest.contact_id); } else { notification.error('Error', 'You dont have permission to see this leave request'); } diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js index 248c2a17f1c..845809c3d74 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-actions.component.spec.js @@ -668,16 +668,15 @@ define([ var leaveRequest = { key: 'value' }; var leaveType = 'some_leave_type'; var selectedContactId = '101'; - var isSelfRecord = true; beforeEach(function () { event = jasmine.createSpyObj('event', ['stopPropagation']); spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(event, leaveRequest, leaveType, selectedContactId, isSelfRecord); + controller.openLeavePopup(event, leaveRequest, leaveType, selectedContactId); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId); }); it('stops the event from propagating', function () { diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js index 7888174f7bb..5b152b07bfd 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/leave-request-record-actions.component.spec.js @@ -117,15 +117,14 @@ define([ var leaveRequest = { key: 'value' }; var leaveType = 'some_leave_type'; var selectedContactId = '101'; - var isSelfRecord = true; beforeEach(function () { spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(leaveRequest, leaveType, selectedContactId, isSelfRecord); + controller.openLeavePopup(leaveRequest, leaveType, selectedContactId); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js index 81d474b6505..acfb6854101 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/components/manage-leave-requests.component.spec.js @@ -870,15 +870,14 @@ define([ var leaveRequest = { key: 'value' }; var leaveType = 'some_leave_type'; var selectedContactId = '101'; - var isSelfRecord = true; beforeEach(function () { spyOn(LeavePopup, 'openModal'); - controller.openLeavePopup(leaveRequest, leaveType, selectedContactId, isSelfRecord); + controller.openLeavePopup(leaveRequest, leaveType, selectedContactId); }); it('opens the leave request popup', function () { - expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId, isSelfRecord); + expect(LeavePopup.openModal).toHaveBeenCalledWith(leaveRequest, leaveType, selectedContactId); }); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js index 68aea8ac628..8ab88dd2f8b 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/js/angular/test/shared/services/leave-popup.service.spec.js @@ -44,7 +44,7 @@ define([ var forceRecalculateBalanceChange = true; beforeEach(function () { - LeavePopup.openModal(jasmine.any(String), jasmine.any(String), jasmine.any(String), jasmine.any(String), + LeavePopup.openModal(jasmine.any(String), jasmine.any(String), jasmine.any(String), forceRecalculateBalanceChange); $rootScope.$digest(); }); diff --git a/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html b/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html index 98df8be2728..ef430d5c164 100644 --- a/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html +++ b/uk.co.compucorp.civicrm.hrleaveandabsences/views/my-leave/components/my-leave-container.html @@ -3,8 +3,7 @@ + selected-contact-id="myleave.contactId">
    -
    +
    -
    +
    '})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"", -errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function we(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!$e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function ye(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var De=r("formatDate"),Ee={},je=r("getActiveValues"),Ce=["funders","cost_centers"],Re=this;Re.contactId=m.contactId,Re.format=p.DATE_FORMAT,Re.loading=!0,Re.pastJobRoles=[],Re.presentJobRoles=[],Re.collapsedRows=[],Re.contactList=[],Re.editData={},Re.viewTab=[],Re.CalendarShow=[],Re.contractsData=[],Re.DepartmentsData={},Re.LevelsData={},Re.LocationsData={},Re.RegionsData={},Re.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Re.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Re.rowTypes={},Re.rowTypes[0]={id:0,name:"Fixed"},Re.rowTypes[1]={id:1,name:"%"},Re.addAdditionalRow=$,Re.addNewRole=w,Re.cancelNewRole=y,Re.changeTab=D,Re.checkIfDatesAreCustom=E,Re.checkNewRole=j,Re.collapseRow=C,Re.deleteAdditionalRow=x,Re.dpOpen=S,Re.getContactList=J,Re.getCostLabel=U,Re.initData=P,Re.isChanged=G,Re.isOpen=Z,Re.isRowCollapsed=X,Re.isTab=Q,Re.onAfterSave=ee,Re.onCancel=te,Re.onContractEdited=ne,Re.onContractSelected=re,Re.open=ae,Re.removeRole=ie,Re.saveNewRole=se,Re.select=le,Re.showRowType=ue,Re.showSave=ce,Re.status="",Re.today=fe,Re.updateAdditionalRowType=me,Re.updateRole=ve,Re.validateRole=we,Re.validateTitle=ye,Re.openOptionsEditor=q,function(){de(),Re.today(),o.all([W(),I(Re.contactId),Re.getContactList()]).then(function(){Re.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'', +controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c Date: Tue, 5 Jun 2018 18:32:47 +0200 Subject: [PATCH 251/251] PCHR-3790: PR feedback --- com.civicrm.hrjobroles/js/dist/job-roles.min.js | 2 +- .../js/src/job-roles/controllers/job-roles.controller.js | 2 +- .../js/test/controllers/job-roles.controller.spec.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/com.civicrm.hrjobroles/js/dist/job-roles.min.js b/com.civicrm.hrjobroles/js/dist/job-roles.min.js index b7fcb0ae105..d00dd05318c 100644 --- a/com.civicrm.hrjobroles/js/dist/job-roles.min.js +++ b/com.civicrm.hrjobroles/js/dist/job-roles.min.js @@ -12,6 +12,6 @@ Build date: 2014-01-10 */ -define("job-roles/modules/job-roles.config",["common/angular"],function(e){"use strict";function t(e,t,n,r,a){t.debugEnabled(a.debug),r.resolveForAll({format:["DateFormat",function(e){return e.getDateFormat()}]}).when("/",{templateUrl:a.pathBaseUrl+a.pathTpl+"mainTemplate.html?v=1",resolve:{},controller:"JobRolesController",controllerAs:"jobroles"}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,e.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("hrjobroles.config",["hrjobroles.constants"]).config(t),t.$inject=["$httpProvider","$logProvider","$resourceProvider","$routeProvider","settings"]}),define("job-roles/modules/job-roles.constants",["common/angular"],function(e){"use strict";e.module("hrjobroles.constants",[]).constant("settings",{classNamePrefix:"hrjobroles-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:CRM.vars.hrjobroles.path,pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.hrjobroles.baseURL+"/",pathTpl:"views/",pathIncludeTpl:"views/include/"})}),define("job-roles/controllers/job-roles.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function r(r,a,o,i,s,l,u,c,d,f,m,p,b,h,v,g,_){function $(e,t){void 0===Re.editData[e]&&(Re.editData[e]={}),"cost_centre"===t?(void 0!==Re.editData[e].cost_centers&&Re.editData[e].cost_centers instanceof Array||(Re.editData[e].cost_centers=[]),Re.editData[e].cost_centers.push({id:Re.editData[e].cost_centers.length+1,cost_centre_id:"",type:"1",percentage:"0",amount:"0"})):(void 0!==Re.editData[e].funders&&Re.editData[e].funders instanceof Array||(Re.editData[e].funders=[]),Re.editData[e].funders.push({id:Re.editData[e].funders.length+1,funder_id:"",type:"1",percentage:"0",amount:"0"}))}function w(){Re.add_new=!0}function y(){Re.add_new=!1,delete Re.editData.new_role_id}function D(e,t){Re.viewTab[e]=t}function E(t,n){K(t)&&(t=null),K(n)&&(n=null);var r=!0;return!!t&&(e.forEach(Re.contractsData,function(e){De(t)===De(e.start_date)&&De(n)===De(e.end_date)&&(r=!1)}),r)}function j(){return void 0===Re.editData.new_role_id||void 0===Re.editData.new_role_id.title||""===Re.editData.new_role_id.title||void 0===Re.editData.new_role_id.job_contract_id||""===Re.editData.new_role_id.job_contract_id}function C(e){Re.collapsedRows[e]=!Re.collapsedRows[e]}function R(e){return g.getContracts(e).then(function(e){for(var t=[],n={},r=0;r-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function we(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!$e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function ye(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var De=r("formatDate"),Ee={},je=r("getActiveValues"),Ce=["funders","cost_centers"],Re=this;Re.contactId=m.contactId,Re.format=p.DATE_FORMAT,Re.loading=!0,Re.pastJobRoles=[],Re.presentJobRoles=[],Re.collapsedRows=[],Re.contactList=[],Re.editData={},Re.viewTab=[],Re.CalendarShow=[],Re.contractsData=[],Re.DepartmentsData={},Re.LevelsData={},Re.LocationsData={},Re.RegionsData={},Re.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Re.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Re.rowTypes={},Re.rowTypes[0]={id:0,name:"Fixed"},Re.rowTypes[1]={id:1,name:"%"},Re.addAdditionalRow=$,Re.addNewRole=w,Re.cancelNewRole=y,Re.changeTab=D,Re.checkIfDatesAreCustom=E,Re.checkNewRole=j,Re.collapseRow=C,Re.deleteAdditionalRow=x,Re.dpOpen=S,Re.getContactList=J,Re.getCostLabel=U,Re.initData=P,Re.isChanged=G,Re.isOpen=Z,Re.isRowCollapsed=X,Re.isTab=Q,Re.onAfterSave=ee,Re.onCancel=te,Re.onContractEdited=ne,Re.onContractSelected=re,Re.open=ae,Re.removeRole=ie,Re.saveNewRole=se,Re.select=le,Re.showRowType=ue,Re.showSave=ce,Re.status="",Re.today=fe,Re.updateAdditionalRowType=me,Re.updateRole=ve,Re.validateRole=we,Re.validateTitle=ye,Re.openOptionsEditor=q,function(){de(),Re.today(),o.all([W(),I(Re.contactId),Re.getContactList()]).then(function(){Re.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'', +define("job-roles/modules/job-roles.config",["common/angular"],function(e){"use strict";function t(e,t,n,r,a){t.debugEnabled(a.debug),r.resolveForAll({format:["DateFormat",function(e){return e.getDateFormat()}]}).when("/",{templateUrl:a.pathBaseUrl+a.pathTpl+"mainTemplate.html?v=1",resolve:{},controller:"JobRolesController",controllerAs:"jobroles"}).otherwise({redirectTo:"/"}),n.defaults.stripTrailingSlashes=!1,e.defaults.headers.common["X-Requested-With"]="XMLHttpRequest"}e.module("hrjobroles.config",["hrjobroles.constants"]).config(t),t.$inject=["$httpProvider","$logProvider","$resourceProvider","$routeProvider","settings"]}),define("job-roles/modules/job-roles.constants",["common/angular"],function(e){"use strict";e.module("hrjobroles.constants",[]).constant("settings",{classNamePrefix:"hrjobroles-",contactId:decodeURIComponent((new RegExp("[?|&]cid=([^&;]+?)(&|#|;|$)").exec(location.search)||[null,""])[1].replace(/\+/g,"%20"))||null,debug:!0,pathApp:CRM.vars.hrjobroles.path,pathRest:CRM.url("civicrm/ajax/rest"),pathBaseUrl:CRM.vars.hrjobroles.baseURL+"/",pathTpl:"views/",pathIncludeTpl:"views/include/"})}),define("job-roles/controllers/job-roles.controller",["common/angular","common/lodash","common/moment"],function(e,t,n){"use strict";function r(r,a,o,i,s,l,u,c,d,f,m,p,b,h,v,g,_){function $(e,t){void 0===Re.editData[e]&&(Re.editData[e]={}),"cost_centre"===t?(void 0!==Re.editData[e].cost_centers&&Re.editData[e].cost_centers instanceof Array||(Re.editData[e].cost_centers=[]),Re.editData[e].cost_centers.push({id:Re.editData[e].cost_centers.length+1,cost_centre_id:"",type:"1",percentage:"0",amount:"0"})):(void 0!==Re.editData[e].funders&&Re.editData[e].funders instanceof Array||(Re.editData[e].funders=[]),Re.editData[e].funders.push({id:Re.editData[e].funders.length+1,funder_id:"",type:"1",percentage:"0",amount:"0"}))}function w(){Re.add_new=!0}function y(){Re.add_new=!1,delete Re.editData.new_role_id}function D(e,t){Re.viewTab[e]=t}function E(t,n){K(t)&&(t=null),K(n)&&(n=null);var r=!0;return!!t&&(e.forEach(Re.contractsData,function(e){De(t)===De(e.start_date)&&De(n)===De(e.end_date)&&(r=!1)}),r)}function j(){return void 0===Re.editData.new_role_id||void 0===Re.editData.new_role_id.title||""===Re.editData.new_role_id.title||void 0===Re.editData.new_role_id.job_contract_id||""===Re.editData.new_role_id.job_contract_id}function C(e){Re.collapsedRows[e]=!Re.collapsedRows[e]}function R(e){return g.getContracts(e).then(function(e){for(var t=[],n={},r=0;r-1&&t.start.push(e),r.indexOf("end_date")>-1&&t.end.push(e)}),h.validate(e.start,e.end,e.contractStart,e.contractEnd),0===n}function we(e){e.start_date.$error.custom=[],e.end_date.$error.custom=[];var t=L(e.contract.$viewValue);return void 0===t?"Contract is missing":!!$e({start:e.start_date.$viewValue,end:e.end_date.$viewValue,contractStart:t.start_date,contractEnd:t.end_date},{start:e.start_date.$error.custom,end:e.end_date.$error.custom})||"Error"}function ye(e){if("title"===e||" "===e)return"Title cannot be title!"}a.debug("Controller: JobRolesController");var De=r("formatDate"),Ee={},je=r("getActiveValues"),Ce=["funders","cost_centers"],Re=this;Re.contactId=m.contactId,Re.format=p.DATE_FORMAT,Re.loading=!0,Re.pastJobRoles=[],Re.presentJobRoles=[],Re.collapsedRows=[],Re.contactList=[],Re.editData={},Re.viewTab=[],Re.CalendarShow=[],Re.contractsData=[],Re.DepartmentsData={},Re.LevelsData={},Re.LocationsData={},Re.RegionsData={},Re.addNewRoleUrl=m.pathBaseUrl+m.pathIncludeTpl+"add_new_role.html",Re.jobRolePanelUrl=m.pathBaseUrl+m.pathIncludeTpl+"job_role_panel.html",Re.rowTypes={},Re.rowTypes[0]={id:0,name:"Fixed"},Re.rowTypes[1]={id:1,name:"%"},Re.addAdditionalRow=$,Re.addNewRole=w,Re.cancelNewRole=y,Re.changeTab=D,Re.checkIfDatesAreCustom=E,Re.checkNewRole=j,Re.collapseRow=C,Re.deleteAdditionalRow=x,Re.dpOpen=S,Re.getContactList=J,Re.getCostLabel=U,Re.initData=P,Re.isChanged=G,Re.isOpen=Z,Re.isRowCollapsed=X,Re.isTab=Q,Re.onAfterSave=ee,Re.onCancel=te,Re.onContractEdited=ne,Re.onContractSelected=re,Re.open=ae,Re.removeRole=ie,Re.saveNewRole=se,Re.select=le,Re.showRowType=ue,Re.showSave=ce,Re.status="",Re.today=fe,Re.updateAdditionalRowType=me,Re.updateRole=ve,Re.validateRole=we,Re.validateTitle=ye,Re.openOptionsEditor=q,function(){de(),Re.today(),o.all([W(),I(Re.contactId),Re.getContactList()]).then(function(){Re.loading=!1})}()}return r.__name="JobRolesController",r.$inject=["$filter","$log","$q","$rootElement","$route","$routeParams","$scope","$timeout","$uibModal","DOMEventTrigger","settings","HR_settings","crmAngService","dateValidation","filtersService","jobRoleService","pubSub"],r}),define("job-roles/controllers/modal-dialog.controller",[],function(){"use strict";function e(e,t,n,r){function a(){e.dismiss("Cancel")}function o(t){e.close(t||!0)}t.debug("Controller: ModalDialogController");var i=this;i.copyCancel=r.copyCancel||"Cancel",i.copyConfirm=r.copyConfirm||"Yes",i.msg=r.msg||"",i.title=r.title||"CiviHR Job Roles",i.cancel=a,i.confirm=o}return e.__name="ModalDialogController",e.$inject=["$uibModalInstance","$log","$timeout","content"],e}),define("job-roles/modules/job-roles.controllers",["common/angular","job-roles/controllers/job-roles.controller","job-roles/controllers/modal-dialog.controller"],function(e,t,n){"use strict";return e.module("hrjobroles.controllers",[]).controller(t.__name,t).controller(n.__name,n)}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(e){return e({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(e){return e({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var e=angular.element('
    ');e.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(e.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(e)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(e){return e({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)}})}]),function(){var e="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(e,function(e){var t="editable"+e.charAt(0).toUpperCase()+e.slice(1);angular.module("xeditable").directive(t,["editableDirectiveFactory",function(n){return n({directiveName:t,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(e){return e({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(e,t){return e({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var e=t(this.attrs.eNgOptions),n='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(n)},autosubmit:function(){var e=this;e.inputEl.bind("change",function(){setTimeout(function(){e.scope.$apply(function(){e.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(e){return e({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var e=this;e.inputEl.bind("change",function(){e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(e){return e({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var e=this;e.parent.addListeners.call(e),e.single&&"no"!==e.buttons&&e.autosubmit()},autosubmit:function(){var e=this;e.inputEl.bind("keydown",function(t){(t.ctrlKey||t.metaKey)&&13===t.keyCode&&e.scope.$apply(function(){e.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(e,t){function n(e,n,r,a,o,i,s,l,u){var c,d,f=this;f.scope=e,f.elem=r,f.attrs=n,f.inputEl=null,f.editorEl=null,f.single=!0,f.error="",f.theme=o[i.theme]||o.default,f.parent={},f.inputTpl="",f.directiveName="",f.useCopy=!1,f.single=null,f.buttons="right",f.init=function(t){if(f.single=t,f.name=n.eName||n[f.directiveName],!n[f.directiveName])throw"You should provide value for `"+f.directiveName+"` in editable element!";c=a(n[f.directiveName]),f.buttons=f.single?f.attrs.buttons||i.buttons:"no",n.eName&&f.scope.$watch("$data",function(e){f.scope.$form.$data[n.eName]=e}),n.onshow&&(f.onshow=function(){return f.catchError(a(n.onshow)(e))}),n.onhide&&(f.onhide=function(){return a(n.onhide)(e)}),n.oncancel&&(f.oncancel=function(){return a(n.oncancel)(e)}),n.onbeforesave&&(f.onbeforesave=function(){return f.catchError(a(n.onbeforesave)(e))}),n.onaftersave&&(f.onaftersave=function(){return f.catchError(a(n.onaftersave)(e))}),e.$parent.$watch(n[f.directiveName],function(){f.handleEmpty()})},f.render=function(){var e=f.theme;f.inputEl=angular.element(f.inputTpl),f.controlsEl=angular.element(e.controlsTpl),f.controlsEl.append(f.inputEl),"no"!==f.buttons&&(f.buttonsEl=angular.element(e.buttonsTpl),f.submitEl=angular.element(e.submitTpl),f.cancelEl=angular.element(e.cancelTpl),f.buttonsEl.append(f.submitEl).append(f.cancelEl),f.controlsEl.append(f.buttonsEl),f.inputEl.addClass("editable-has-buttons")),f.errorEl=angular.element(e.errorTpl),f.controlsEl.append(f.errorEl),f.editorEl=angular.element(f.single?e.formTpl:e.noformTpl),f.editorEl.append(f.controlsEl);for(var r in n.$attr)if(!(r.length<=1)){var a=!1,o=r.substring(1,2);if("e"===r.substring(0,1)&&o===o.toUpperCase()&&"Form"!==(a=r.substring(1))&&"NgSubmit"!==a){a=a.substring(0,1).toLowerCase()+t.camelToDash(a.substring(1));var s=""===n[r]?a:n[r];f.inputEl.attr(a,s)}}f.inputEl.addClass("editable-input"),f.inputEl.attr("ng-model","$data"),f.editorEl.addClass(t.camelToDash(f.directiveName)),f.single&&(f.editorEl.attr("editable-form","$form"),f.editorEl.attr("blur",f.attrs.blur||("no"===f.buttons?"cancel":i.blurElem))),angular.isFunction(e.postrender)&&e.postrender.call(f)},f.setLocalValue=function(){f.scope.$data=f.useCopy?angular.copy(c(e.$parent)):c(e.$parent)},f.show=function(){return f.setLocalValue(),f.render(),r.after(f.editorEl),l(f.editorEl)(e),f.addListeners(),r.addClass("editable-hide"),f.onshow()},f.hide=function(){return f.editorEl.remove(),r.removeClass("editable-hide"),f.onhide()},f.cancel=function(){f.oncancel()},f.addListeners=function(){f.inputEl.bind("keyup",function(e){if(f.single)switch(e.keyCode){case 27:f.scope.$apply(function(){f.scope.$form.$cancel()})}}),f.single&&"no"===f.buttons&&f.autosubmit(),f.editorEl.bind("click",function(e){1===e.which&&f.scope.$form.$visible&&(f.scope.$form._clicked=!0)})},f.setWaiting=function(e){e?(d=!f.inputEl.attr("disabled")&&!f.inputEl.attr("ng-disabled")&&!f.inputEl.attr("ng-enabled"))&&(f.inputEl.attr("disabled","disabled"),f.buttonsEl&&f.buttonsEl.find("button").attr("disabled","disabled")):d&&(f.inputEl.removeAttr("disabled"),f.buttonsEl&&f.buttonsEl.find("button").removeAttr("disabled"))},f.activate=function(){setTimeout(function(){var e=f.inputEl[0];"focus"===i.activate&&e.focus&&e.focus(),"select"===i.activate&&e.select&&e.select()},0)},f.setError=function(t){angular.isObject(t)||(e.$error=t,f.error=t)},f.catchError=function(e,t){return angular.isObject(e)&&!0!==t?u.when(e).then(angular.bind(this,function(e){this.catchError(e,!0)}),angular.bind(this,function(e){this.catchError(e,!0)})):t&&angular.isObject(e)&&e.status&&200!==e.status&&e.data&&angular.isString(e.data)?(this.setError(e.data),e=e.data):angular.isString(e)&&this.setError(e),e},f.save=function(){c.assign(e.$parent,angular.copy(f.scope.$data))},f.handleEmpty=function(){var t=c(e.$parent),n=null===t||void 0===t||""===t||angular.isArray(t)&&0===t.length;r.toggleClass("editable-empty",n)},f.autosubmit=angular.noop,f.onshow=angular.noop,f.onhide=angular.noop,f.oncancel=angular.noop,f.onbeforesave=angular.noop,f.onaftersave=angular.noop}return n.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],n}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(e,t,n,r,a,o,i){return function(t){return{restrict:"A",scope:!0,require:[t.directiveName,"?^form"],controller:o,link:function(n,o,s,l){var u,c=l[0],d=!1;if(l[1])u=l[1],d=!0;else if(s.eForm){var f=e(s.eForm)(n);if(f)u=f,d=!0;else for(var m=0;m=0&&e.splice(n,1),t},camelToDash:function(e){var t=/[A-Z]/g;return e.replace(t,function(e,t){return(t?"-":"")+e.toLowerCase()})},dashToCamel:function(e){var t=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/;return e.replace(t,function(e,t,n,r){return r?n.toUpperCase():n}).replace(n,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function e(e){var n;if(!(n=e.match(t)))throw"ng-options parse error";var r,a=n[2]||n[1],o=n[4]||n[6],i=n[5],s=(n[3],n[2]?n[1]:o),l=n[7],u=n[8],c=u?n[8]:null;return void 0===i?(r=o+" in "+l,void 0!==u&&(r+=" track by "+c)):r="("+i+", "+o+") in "+l,{ngRepeat:r,locals:{valueName:o,keyName:i,valueFn:s,displayFn:a}}}var t=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return e}]),angular.module("xeditable").factory("editableThemes",function(){return{default:{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'', controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}}}),function(e,t,n){"use strict";function r(e){return F(e)?e:Object.keys(e).map(function(t){return e[t]})}function a(e){return null===e}function o(e,t){return-1==Object.keys(e).map(function(r){return t[r]!==n&&t[r]==e[r]}).indexOf(!1)}function i(e,t){if(""===t)return e;var n=e.indexOf(t.charAt(0));return-1!==n&&i(e.substr(n+1),t.substr(1))}function s(e,t,n){var r=0;return e.filter(function(e){var a=D(n)?t>r&&n(e):t>r;return r=a?r+1:r,a})}function l(e,t,n){return n.round(e*n.pow(10,t))/n.pow(10,t)}function u(e,t,n){return t=t||[],Object.keys(e).forEach(function(r){if(T(e[r])&&!F(e[r])){var a=n?n+"."+r:n;u(e[r],t,a||r)}else{var o=n?n+"."+r:r;t.push(o)}}),t}function c(e){return e&&e.$evalAsync&&e.$watch}function d(){return function(e,t){return e>t}}function f(){return function(e,t){return e>=t}}function m(){return function(e,t){return t>e}}function p(){return function(e,t){return t>=e}}function b(){return function(e,t){return e==t}}function h(){return function(e,t){return e!=t}}function v(){return function(e,t){return e===t}}function g(){return function(e,t){return e!==t}}function _(e){return function(t,n){return t=T(t)?r(t):t,!(!F(t)||E(n))&&t.some(function(t){return T(t)||j(n)?e(n)(t):t===n})}}function $(e,t){return t=t||0,t>=e.length?e:F(e[t])?$(e.slice(0,t).concat(e[t],e.slice(t+1)),t):$(e,t+1)}function w(e){return function(t,n){function a(e,t){return!E(t)&&e.some(function(e){return N(e,t)})}if(t=T(t)?r(t):t,!F(t))return t;var o=[],i=e(n);return t.filter(E(n)?function(e,t,n){return n.indexOf(e)===t}:function(e){var t=i(e);return!a(o,t)&&(o.push(t),!0)})}}function y(e,t,n){return t?e+n+y(e,--t,n):e}var D=t.isDefined,E=t.isUndefined,j=t.isFunction,C=t.isString,R=t.isNumber,T=t.isObject,F=t.isArray,x=t.forEach,A=t.extend,S=t.copy,N=t.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),t.module("a8m.angular",[]).filter("isUndefined",function(){return function(e){return t.isUndefined(e)}}).filter("isDefined",function(){return function(e){return t.isDefined(e)}}).filter("isFunction",function(){return function(e){return t.isFunction(e)}}).filter("isString",function(){return function(e){return t.isString(e)}}).filter("isNumber",function(){return function(e){return t.isNumber(e)}}).filter("isArray",function(){return function(e){return t.isArray(e)}}).filter("isObject",function(){return function(e){return t.isObject(e)}}).filter("isEqual",function(){return function(e,n){return t.equals(e,n)}}),t.module("a8m.conditions",[]).filter({isGreaterThan:d,">":d,isGreaterThanOrEqualTo:f,">=":f,isLessThan:m,"<":m,isLessThanOrEqualTo:p,"<=":p,isEqualTo:b,"==":b,isNotEqualTo:h,"!=":h,isIdenticalTo:v,"===":v,isNotIdenticalTo:g,"!==":g}),t.module("a8m.is-null",[]).filter("isNull",function(){return function(e){return a(e)}}),t.module("a8m.after-where",[]).filter("afterWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(-1===n?0:n)}}),t.module("a8m.after",[]).filter("after",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(t):e}}),t.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(e,t){if(e=T(e)?r(e):e,!F(e)||E(t))return e;var n=e.map(function(e){return o(t,e)}).indexOf(!0);return e.slice(0,-1===n?e.length:++n)}}),t.module("a8m.before",[]).filter("before",function(){return function(e,t){return e=T(e)?r(e):e,F(e)?e.slice(0,t?--t:t):e}}),t.module("a8m.concat",[]).filter("concat",[function(){return function(e,t){if(E(t))return e;if(F(e))return e.concat(T(t)?r(t):t);if(T(e)){return r(e).concat(T(t)?r(t):t)}return e}}]),t.module("a8m.contains",[]).filter({contains:["$parse",_],some:["$parse",_]}),t.module("a8m.count-by",[]).filter("countBy",["$parse",function(e){return function(t,n){var a,o={},i=e(n);return t=T(t)?r(t):t,!F(t)||E(n)?t:(t.forEach(function(e){a=i(e),o[a]||(o[a]=0),o[a]++}),o)}}]),t.module("a8m.defaults",[]).filter("defaults",["$parse",function(e){return function(t,n){if(t=T(t)?r(t):t,!F(t)||!T(n))return t;var a=u(n);return t.forEach(function(t){a.forEach(function(r){var a=e(r),o=a.assign;E(a(t))&&o(t,a(n))})}),t}}]),t.module("a8m.every",[]).filter("every",["$parse",function(e){return function(t,n){return t=T(t)?r(t):t,!(F(t)&&!E(n))||t.every(function(t){return T(t)||j(n)?e(n)(t):t===n})}}]),t.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(e){return function(t,a,o){var i;return o=C(o)||R(o)?String(o).toLowerCase():n,t=T(t)?r(t):t,!F(t)||E(o)?t:t.filter(function(t){return a.some(function(n){if(~n.indexOf("+")){var r=n.replace(new RegExp("\\s","g"),"").split("+");i=r.reduce(function(n,r,a){return 1===a?e(n)(t)+" "+e(r)(t):n+" "+e(r)(t)})}else i=e(n)(t);return!(!C(i)&&!R(i))&&String(i).toLowerCase().contains(o)})})}}]),t.module("a8m.first",[]).filter("first",["$parse",function(e){return function(t){var a,o,i;return t=T(t)?r(t):t,F(t)?(i=Array.prototype.slice.call(arguments,1),a=R(i[0])?i[0]:1,o=R(i[0])?R(i[1])?n:i[1]:i[0],i.length?s(t,a,o?e(o):o):t[0]):t}}]),t.module("a8m.flatten",[]).filter("flatten",function(){return function(e,t){return t=t||!1,e=T(e)?r(e):e,F(e)?t?[].concat.apply([],e):$(e,0):e}}),t.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(e){return function(t,n,a,o){var s,l,u=o||!1;return t=T(t)?r(t):t,!F(t)||E(n)||E(a)?t:(l=e(n),t.filter(function(e){return s=l(e),!!C(s)&&(s=u?s:s.toLowerCase(),a=u?a:a.toLowerCase(),!1!==i(s,a))}))}}]),t.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(e,t,n){function a(e,t){var n,r;return 0=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" B":1048576>t?l(t/1024,n,e)+" KB":1073741824>t?l(t/1048576,n,e)+" MB":l(t/1073741824,n,e)+" GB":"NaN"}}]),t.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=180*t/e.PI;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1024>t?l(t,n,e)+" KB":1048576>t?l(t/1024,n,e)+" MB":l(t/1048576,n,e)+" GB":"NaN"}}]),t.module("a8m.math",[]).factory("$math",["$window",function(e){return e.Math}]),t.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.max.apply(e,a))}return function(t,r){return F(t)?E(r)?e.max.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(e,t){function n(n,r){var a=n.map(function(e){return t(r)(e)});return a.indexOf(e.min.apply(e,a))}return function(t,r){return F(t)?E(r)?e.min.apply(e,t):t[n(t,r)]:t}}]),t.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(e,t){return function(n,r,a){var o=C(n)?t.Number(n):n;return r=r||100,a=a||!1,!R(o)||t.isNaN(o)?n:a?e.round(o/r*100):o/r*100}}]),t.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(e){return function(t,n){if(R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)){var r=3.14159265359*t/180;return e.round(r*e.pow(10,n))/e.pow(10,n)}return"NaN"}}]),t.module("a8m.math.radix",[]).filter("radix",function(){return function(e,t){var n=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return R(e)&&n.test(t)?e.toString(t).toUpperCase():e}}),t.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(e){return function(t,n){return R(n)&&isFinite(n)&&n%1==0&&n>=0&&R(t)&&isFinite(t)?1e3>t?t:1e6>t?l(t/1e3,n,e)+" K":1e9>t?l(t/1e6,n,e)+" M":l(t/1e9,n,e)+" B":"NaN"}}]),t.module("a8m.math.sum",[]).filter("sum",function(){return function(e,t){return F(e)?e.reduce(function(e,t){return e+t},t||0):e}}),t.module("a8m.ends-with",[]).filter("endsWith",function(){return function(e,t,n){var r,a=n||!1;return!C(e)||E(t)?e:(e=a?e:e.toLowerCase(),r=e.length-t.length,-1!==e.indexOf(a?t:t.toLowerCase(),r))}}),t.module("a8m.latinize",[]).filter("latinize",[function(){function e(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return n[e]||e})}for(var t=[{base:"A",letters:"AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷBḂḄḆɃƂƁ"},{base:"C",letters:"CⒸCĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"DZDŽ"},{base:"Dz",letters:"DzDž"},{base:"E",letters:"EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻFḞƑꝻ"},{base:"G",letters:"GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿJĴɈ"},{base:"K",letters:"KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"LJ"},{base:"Lj",letters:"Lj"},{base:"M",letters:"MⓂMḾṀṂⱮƜ"},{base:"N",letters:"NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"NJ"},{base:"Nj",letters:"Nj"},{base:"O",letters:"OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"ŒŒ"},{base:"oe",letters:"œœ"},{base:"P",letters:"PⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆQꝖꝘɊ"},{base:"R",letters:"RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋVṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌWẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍXẊẌ"},{base:"Y",letters:"YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑbḃḅḇƀƃɓ"},{base:"c",letters:"cⓒcćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓdḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"dzdž"},{base:"e",letters:"eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕfḟƒꝼ"},{base:"g",letters:"gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙjĵǰɉ"},{base:"k",letters:"kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"lj"},{base:"m",letters:"mⓜmḿṁṃɱɯ"},{base:"n",letters:"nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"},{base:"nj",letters:"nj"},{base:"o",letters:"oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟpṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠqɋꝗꝙ"},{base:"r",letters:"rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥvṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧxẋẍ"},{base:"y",letters:"yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩzźẑżžẓẕƶȥɀⱬꝣ"}],n={},r=0;r<]*>/g,""):e}}),t.module("a8m.test",[]).filter("test",function(){return function(e,t,n){var r=new RegExp(t,n);return C(e)?r.test(e):e}}),t.module("a8m.trim",[]).filter("trim",function(){return function(e,t){var n=t||"\\s";return C(e)?e.replace(new RegExp("^"+n+"+|"+n+"+$","g"),""):e}}),t.module("a8m.truncate",[]).filter("truncate",function(){return function(e,t,n,r){return t=E(t)?e.length:t,r=r||!1,n=n||"",!C(e)||e.length<=t?e:e.substring(0,r?-1===e.indexOf(" ",t)?e.length:e.indexOf(" ",t):t)+n}}),t.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(e){return C(e)?e.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "):e}}]),t.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(e){return function(t){return C(t)?e.encodeURIComponent(t):t}}]),t.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(e){return function(t){return C(t)?e.encodeURI(t):t}}]),t.module("a8m.wrap",[]).filter("wrap",function(){return function(e,t,n){return C(e)&&D(t)?[t,e,n||t].join(""):e}}),t.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(e,n){function r(e,n){return[e,t.toJson(n)].join("#").replace(/"/g,"")}function a(e){var t=e.targetScope.$id;x(d[t],function(e){delete u[e]}),delete d[t]}function o(){f(function(){n.$$phase||(u={})})}function i(e,t){var n=e.$id;return E(d[n])&&(e.$on("$destroy",a),d[n]=[]),d[n].push(t)}function s(e,t){var n=r(e,t);return u[n]}function l(e,t,n,a){var s=r(e,t);return u[s]=a,c(n)?i(n,s):o(),a}var u={},d={},f=e.setTimeout;return{isMemoized:s,memoize:l}}]}),t.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),define("job-roles/modules/job-roles.core",["common/angular","common/ui-select","common/directives/angular-date/date-input","common/modules/directives","common/modules/routers/compu-ng-route","common/filters/angular-date/format-date","common/services/angular-date/date-format","common/services/crm-ang.service","common/services/dom-event-trigger","common/services/pub-sub","job-roles/vendor/angular-editable","job-roles/vendor/angular-filter"],function(e){"use strict";e.module("hrjobroles.core",["angular.filter","ngAnimate","ngSanitize","ngResource","ui.bootstrap","ui.select","xeditable","common.angularDate","common.directives","common.services","compuNgRoute"])}),define("job-roles/filters/get-active-values.filter",["common/lodash"],function(e){"use strict";function t(t){return t.debug("Filter: getActiveValues"),function(t){var n={};return e.each(t,function(e,t){"1"===e.is_active&&(n[t]=e)}),n}}return t.__name="getActiveValues",t.$inject=["$log"],t}),define("job-roles/modules/job-roles.filters",["common/angular","job-roles/filters/get-active-values.filter"],function(e,t){"use strict";return e.module("hrjobroles.filters",[]).filter(t.__name,t)}),define("job-roles/modules/job-roles.run",["common/angular"],function(e){"use strict";function t(e,t,n,r){n.theme="bs3",t.contactId=r.contactId,t.pathBaseUrl=r.pathBaseUrl,t.pathTpl=r.pathTpl,t.pathIncludeTpl=r.pathIncludeTpl,t.prefix=r.classNamePrefix}e.module("hrjobroles.run",["hrjobroles.constants"]).run(t),t.$inject=["$q","$rootScope","editableOptions","settings"]}),define("job-roles/services/date-validation.service",["common/moment"],function(e){function t(t){function n(e,t){e.isValid()||l("Date is not valid!!",t)}function r(e,t){e.isSameOrAfter(t)&&l("Start Date cannot be the same as or after the End Date.",["start_date","end_date"])}function a(e,t){e.isBefore(t)&&l("Start Date cannot be lower than Contract Start Date.",["start_date"])}function o(e,t){e.isAfter(t)&&l("Start Date cannot be higher than Contract End Date.",["start_date"])}function i(e,t){e.isAfter(t)&&l("End Date cannot be higher than Contract End Date.",["end_date"])}function s(t,n){return t instanceof Date&&(t=e(t).valueOf()),e(t,n,!0).startOf("day")}var l=function(e,t){throw new Error(e,t[0])},u={dateFormats:["x","YYYY-MM-DD"],setErrorCallback:function(e){if("function"!=typeof e)throw new TypeError("Error callback must be a function.");l=e},validate:function(e,t,l,u){e=s(e,this.dateFormats),l=s(l,this.dateFormats),u=s(u,this.dateFormats),n(e,["start_date"]),o(e,u),a(e,l),(0===t||t)&&(t=s(t,this.dateFormats),n(t,["end_date"]),i(t,u),r(e,t))}};return t.DATE_FORMAT&&u.dateFormats.push(t.DATE_FORMAT.toUpperCase()),u}return t.__name="dateValidation",t.$inject=["HR_settings"],t}),define("job-roles/services/filters.service",[],function(){"use strict";function e(){return{isNotUndefined:function(e){try{return e.constructor===Array?e.filter(function(e){return"undefined"!==e&&void 0!==e}):e}catch(t){return e}},issetCostCentre:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.cost_centre_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}},issetFunder:function(e){try{return e.constructor===Array?e.filter(function(e){return""!==e.funder_id&&("1"===e.type&&parseInt(e.percentage)>0||"0"===e.type&&parseInt(e.amount)>0)}):e}catch(t){return e}}}}return e.__name="filtersService",e}),define("job-roles/services/job-role.service",["common/lodash"],function(e){"use strict";function t(t,n,r){function a(n){var r=n["api.HRJobContractRevision.get"].values;delete n["api.HRJobContractRevision.get"],n.revisions=e.compact(r.map(function(e){var r=e["api.HRJobDetails.getsingle"];return r.period_start_date===n.period_start_date&&r.period_end_date===n.period_end_date?null:(r.period_start_date=t("formatDate")(r.period_start_date),r.period_end_date=t("formatDate")(r.period_end_date),r)}))}return{getContracts:function(e){var t=r.defer();return CRM.api3("HRJobContract","get",{sequential:1,contact_id:e,deleted:0,return:"title,period_end_date,period_start_date","api.HRJobContractRevision.get":{jobcontract_id:"$value.id","api.HRJobDetails.getsingle":{jobcontract_revision_id:"$value.id"}}}).done(function(e){e.values.forEach(a),t.resolve(e)}).error(function(){t.reject("An error occured while fetching items")}),t.promise},getAllJobRoles:function(e){var t=r.defer();return CRM.api3("HrJobRoles","get",{sequential:1,return:"id,job_contract_id,title,description,status,funder,funder_val_type,percent_pay_funder,amount_pay_funder,cost_center,cost_center_val_type,percent_pay_cost_center,amount_pay_cost_center,level_type,location,region,department,end_date,start_date",job_contract_id:{IN:e}}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while fetching items")}),t.promise},deleteJobRole:function(e){var t=r.defer();return CRM.api3("HrJobRoles","delete",{sequential:1,id:e}).done(function(e){t.resolve(e)}).error(function(e){t.reject("An error occured while deleting items")}),t.promise},createJobRole:function(e){var t="|",n="|",a="|",o="|",i="|",s="|",l="|",u="|";if(void 0!==e.funders)for(var c=0,d=e.funders.length;c